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

该程序的功能是获取各个控件中的内容并存
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文件的指定行的末尾,但是每次运行输入数据总是报错(如标题所示),请问哪里有问题

亲, 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

内容要追加到每一行的结尾处?

追问

是的,研究了一天还是没有满意的结果,想哭了

追答

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);
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)
{
a[j]=a[j]+line;
j++
}
sr.Close();
sr.Dispose();

//循环写入,覆盖源文件
System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,false,Encoding.Default);
foreach(var data in a)
{
sw.WriteLine(data);
}
sw.Close();
sw.Dispose();
}

追问

按你的改后又出现这个,也是我经常碰到的错误!!

追答

出现这个问题的原因在于你的行数大于了6行,致使j>=6了,然后数组a的最大索引为5,所以造成数组越界。你调试跟踪一下。

tablename:t1 t1 t1 t1
tagname:tag1 tag1 tag1 tag1
starttime:start1 start1 start1 start1
endtime:end1 end1 end1 end1
interval:in1 in1 in1 in1
xlspath:path1 path1 path1 path1
这是我执行后的文件内容,没有错误啊!你要保证文件只有6行
a[j] = line + a[j];这样写才能保证写到新的内容写到行的末尾。

温馨提示:内容为网友见解,仅供参考
第1个回答  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();
这样应该是好使了。要是再不好使你加断点看看哪里报的异常

追问

System.IO.StreamWriter sw = new System.IO.StreamWriter(filename,true,Encoding.Default); 这这句话报异常,还是不行呀

追答

while ((line = sr.ReadLine())!=null)
这是要干什么?
你需要读取之后关闭流,然后再写。
不能读和写的流同时打开,因为他们都是以独占的方式打开

追问

就是一行一行的读取文件内容吧

追答

可以像楼下说的使用list存储读出来的东西,
但不能以这种方式边读边写,写之前要将读的流关闭。

第2个回答  2013-07-22
你可以将读和写分开,因为读写不能同时进行,修改代码如下
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();
第3个回答  2013-07-22
先读出关闭读,然后再写。追问

关闭了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();

C# 文件“c:\\config.txt”正在由另一进程使用,因此无法访问该文件
该程序的功能是获取各个控件中的内容并存 private void button4_Click(object sender, EventArgs e) { string filename = @"c:\\config.txt"; int j = 0; System.IO.StreamReader sr = new Sy... 展开 ftafxjdi110 | 浏览2521 次 |举报 我有更好的答案推荐于2017-12-16 15:05:55 最佳答案 亲, ...

C# 文件“c:\\config.txt”正在由另一进程使用,因此无法访问该文件
去掉 System.IO.StreamReader sr = new System.IO.StreamReader(filename);直接将内容写到文件末尾,还读一遍干吗

C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”
在C#中,当尝试操作txt文件时,可能会遇到“正由另一进程使用,因此该进程无法访问此文件”的错误。这是因为多个并发的进程或线程试图同时读写同一个文件,导致了权限冲突。针对这个问题,有以下解决步骤:首先,你需要创建一个新的控制台应用程序。在这个程序中,你需要导入System.Diagnostics命名空间,因为...

C#中操作txt,抛出“正由另一进程使用,因此该进程无法访问此文件”
出现这个问题的原因是多个进程或线程同时读写文件导致的。解决方法如下:1、首先新建一个控制台程序。2、然后导入进程相关的操作类,主要是diagnostics。3、然后调用Process类的GetProcesses方法,获取系统所以进程,注意是一个数组。4、来看一下Process的相关解释说明,把鼠标放上去,看到如下图所示的内容。...

C#中txt文本正由另一进程使用,因此该进程无法访问该文件。
这个方法打开文件的时候是以只读共享的方式打开的,但若此文件已被一个拥有写权限的进程打开的话,就无法读取了,因此需要使用 System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open,System.IO.FileAccess.Read,FileShare.ReadWrite);设置文件共享方式为读写,FileShare....

c# 移动文件 正由另一进程使用,因此该进程无法访问该文件。
这是个IOException 因为文件同时在操作,如果你是多线程程序的话。例:object locker = new object();\/\/每个线程操作时,请先加锁 lock(locker){ }

C# 文件xxxxx 正由另一进程使用,因此该进程无法访问该文件!!!
在你得这个程序中,如果在Sw.Close();语句执行以前程序抛出了一场,那么streamwriter和filestream是不能够正常关闭的,这样,当下一次执行这个方法的时候,就会出现无法访问文件的问题。try {...} catch {...} finnaly { sw.close();sw.dispose();fsw.close();fsw.dispose();} 另外,建议你用...

...整由另一个进程使用,因此该进程无法访问次文件”
对文件的操作没有及时释放资源

...时异常:文件“**”正由另一进程使用,因此该进程无法访问该文件。
把文件关闭。可能是你打开一个文件或是你程序后台打开一个文件,但是没有关闭这个进程。导致的写错误。最好是用任务管理器结束你的之前可能打开文件的进程,

C# 另一个进程正在使用它,怎么才能找到正在使用它的这个进程呢
楼主您好:当C#弹出提示或者报错说有“另外一个进程正在使用该文件”时,这个情况一般可以分为:1、有可能是你自己当前的C#程序代码中调用这个文件结束后,没有及时关闭这个文件的流操作,导致下次调用时,系统会判断到你这个文件没有被关闭,一直处于打开读取状态,就会报这个错误,最好的解决办法是,文件...

相似回答