创建文件错误 - 正在使用文件?

时间:2013-10-29 17:41:12

标签: c#

我想做什么 - 有两个嵌套的for循环。外部生成字符串文件名并创建文件名(如果不存在),内部生成要写入文件名的字符串。它将字符串附加到此文件名。对我们想要的每个文件名重复该过程。

我尝试使用(部分代码) -

string path = @"path here";
File.Create(path);
StreamWriter file = new StreamWriter(path, true);

outer for loop{
file.WriteLine(strMsg);
}

file.Close();

文件已创建,但没有任何内容写入,我收到错误 - 另一个进程正在使用文件'xyz'。如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

File.Create方法创建并打开文件。您忽略了FileStream返回值,这意味着它没有被关闭。

当您尝试使用StreamWriter打开文件时,它已经打开,这将失败。

在这种情况下,完全忽略File.CreateStreamWriter的构造函数将为您创建文件:

using(StreamWriter file = new StreamWriter(path, false))
{
    for // ... outer for loop
    {
        file.WriteLine(strMsg);
    }
} 

答案 1 :(得分:3)

您需要处理创建的流对象以释放文件锁。特别是File.Create没有处置,所以它仍然会锁定刚刚创建的文件。

string path = @"path here";
File.Create(name).Dispose();  // Kill the lock immediately.
using (StreamWriter file = new StreamWriter(path, true))
{
outer for loop{
file.WriteLine(strMsg);
}
// Stream will close automatically when leaving the using block.

答案 2 :(得分:0)

File.Create返回一个你忽略的FileStream。

也许更像这样的事情?

using (FileStream fs = File.Create(path)) {}

将允许您保持代码完好无损并解决问题?