C# 文件“c:\config.txt”正在由另一进程使用,因此无法访问该文件

该程序的功能是获取各个控件中的内容并存privatevoidbutton4_Click(objectsender,EventArgse){stringfilename=@... 该程序的功能是获取各个控件中的内容并存
private void button4_Click(object sender, EventArgs e)
{
string filename = @"c:\config.txt";
int j = 0;

System.IO.StreamReader sr = new System.IO.StreamReader(filename);
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,true,Encoding.Default);
string line;
string tablename = textBox3.Text;
string tagname = listBox1.Text;
string starttime = dateTimePicker1.Text;
string endtime = dateTimePicker2.Text;
string interval = textBox1.Text;
string xlspath = textBox2.Text;
string[]a={tablename,tagname,starttime,endtime,interval,xlspath};

while ((line = sr.ReadLine())!=null)
{

sw.WriteLine(line + a[j]);
j++;
}

sr.Close();

sw.Close();
}
入到txt文件的指定行的末尾,但是每次运行输入数据总是报错(如标题所示),请问哪里有问题
展开
 我来答
zljk0306
推荐于2017-12-16 · TA获得超过366个赞
知道小有建树答主
回答量:229
采纳率:90%
帮助的人:206万
展开全部
亲, System.IO.StreamReader sr = new System.IO.StreamReader(filename);
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,true,Encoding.Default);
你这样又读又写的。。所以提示被占用!
你的逻辑有问题,为什么要读写同一个文件,你这样做没意义。
去掉 System.IO.StreamReader sr = new System.IO.StreamReader(filename);
直接将内容写到文件末尾,还读一遍干吗
更多追问追答
追问
可是我是要向同一个文件添加数据啊,把那个去掉了下面就报错了
追答
你的txt文件时不是这种结构啊
tablename
tagname
starttime
endtime
interval
xlspath

内容要追加到每一行的结尾处?
匿名用户
2013-07-22
展开全部
你那txt 文件是不是打开这呢?
不对,你应该在写之前先关闭读取的流,就是改成

sr.Close();
while ((line = sr.ReadLine())!=null)
{

sw.WriteLine(line + a[j]);
j++;
}
更多追问追答
追问
没有打开啊,还是不行呢,一样的错误
追答
哦,你加断点,看看哪里报的异常。
应该这样写那就,
string filename = @"c:\config.txt";
int j = 0;

System.IO.StreamReader sr = new System.IO.StreamReader(filename);

string line;
string tablename = textBox3.Text;
string tagname = listBox1.Text;
string starttime = dateTimePicker1.Text;
string endtime = dateTimePicker2.Text;
string interval = textBox1.Text;
string xlspath = textBox2.Text;
string[]a={tablename,tagname,starttime,endtime,interval,xlspath};
sr.Close();
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,true,Encoding.Default);while ((line = sr.ReadLine())!=null)
{

sw.WriteLine(line + a[j]);
j++;
}
sw.Close();
这样应该是好使了。要是再不好使你加断点看看哪里报的异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chrisbadboy
2013-07-22 · TA获得超过225个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:177万
展开全部
你可以将读和写分开,因为读写不能同时进行,修改代码如下
string filename = @"D:\config.txt";
int j = 0;
System.IO.StreamReader sr = new System.IO.StreamReader(filename);
string line;
string tablename = textBox3.Text;
string tagname = listBox1.Text;
string starttime = dateTimePicker1.Text;
string endtime = dateTimePicker2.Text;
string interval = textBox1.Text;
string xlspath = textBox2.Text;
string[] a = { tablename, tagname, starttime, endtime, interval, xlspath };
string[] b = new string[6];
while ((line = sr.ReadLine()) != null)
{
b[j] = line;
j++;
}
sr.Close();
System.IO.File.Delete(filename);
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename, true, Encoding.Default);
for (int i = 0; i < a.Length; i++)
{
sw.WriteLine(b[i] + a[i]);
}
sw.Close();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gzxpg
2013-07-22 · TA获得超过232个赞
知道小有建树答主
回答量:838
采纳率:76%
帮助的人:234万
展开全部
先读出关闭读,然后再写。
追问
关闭了while那里就报异常了
追答

全部读完到一个list里面,然后修改内容,最后你再覆盖写到文件中。

 System.IO.StreamReader sr = new System.IO.StreamReader(filename);
         List<string> strList=new  List<string>();
            string line;
            string tablename = textBox3.Text;
            string tagname = listBox1.Text;
            string starttime = dateTimePicker1.Text;
            string endtime = dateTimePicker2.Text;
            string interval = textBox1.Text;
            string xlspath = textBox2.Text;
            string[]a={tablename,tagname,starttime,endtime,interval,xlspath};

while (!sr.EndOfStream)
                {
                   strList.Add(sr.ReadLine());
                   
                }
            
                sr.Close();
                   System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,true,Encoding.Default);
                   for(int j=0;j<strlist.count;j++)
                   {
                    sw.WriteLine(line + a[j]);
                   }
                sw.Close();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式