该过程可以使用streamwriter访问该文件

时间:2014-04-09 10:17:21

标签: c# file

我在表单加载时读取文件

string line;
if (!File.Exists(dir)) File.Create(dir);
StreamReader reader = new StreamReader(dir);
while ((line = reader.ReadLine()) != null)
{ /* do something */}
reader.Close();

然后按下按钮并在此文件中写入内容。但是在行

System.IO.StreamWriter file = new StreamWriter(dir);

我有一个错误"另一个进程使用的文件"。为什么?我关闭了我的读者..

2 个答案:

答案 0 :(得分:4)

File.Create打开文件并返回FileStream。尝试:

using (var fs = File.Open(dir, FileMode.OpenOrCreate))
{
    using (var reader = new StreamReader(fs))
    {
        while ((line = reader.ReadLine()) != null)
        { /* do something */}
    }
}

修改

您也可以

if (!File.Exists(dir)) File.Create(dir).Close();

确保关闭流

答案 1 :(得分:2)

这两行冲突:

 if (!File.Exists(dir)) File.Create(dir);
 StreamReader reader = new StreamReader(dir);

因为File.Create()创建了一个新文件而保持打开。因此阻止为StreamReader打开文件。

在API级别,File.Create()不符合您的想法。它与Directory.Create()。

非常不同

但从功能上来说,你的代码也没有任何意义,为什么你会在阅读它之前创建一个新文件?它总是空的。

只需使用

if (File.Exitst(dir))
{
  var lines = System.IO.File.ReadLines(dir);
  foreach(string line in lines) {  /* do something */ }
}