1

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

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

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

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

file.Close();

该文件已创建,但没有写入任何内容,并且出现错误 - 文件“xyz”正在被另一个进程使用。如何解决这个问题?

4

3 回答 3

4

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

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

在这种情况下,只需File.Create完全省略即可。 StreamWriter的构造函数将为您创建文件:

using(StreamWriter file = new StreamWriter(path, false))
{
    for // ... outer for loop
    {
        file.WriteLine(strMsg);
    }
} 
于 2013-10-29T17:44:59.280 回答
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.
于 2013-10-29T17:45:51.840 回答
0

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

也许更像这样?

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

将允许您保持代码完整并解决问题?

于 2013-10-29T17:45:33.463 回答