我想做什么 - 有两个嵌套的for循环。外部生成字符串文件名并创建文件名(如果不存在),内部生成要写入文件名的字符串。它将字符串附加到此文件名。对我们想要的每个文件名重复该过程。
我尝试使用(部分代码) -
string path = @"path here";
File.Create(path);
StreamWriter file = new StreamWriter(path, true);
outer for loop{
file.WriteLine(strMsg);
}
file.Close();
文件已创建,但没有任何内容写入,我收到错误 - 另一个进程正在使用文件'xyz'。如何解决这个问题?
答案 0 :(得分:4)
File.Create
方法创建并打开文件。您忽略了FileStream
返回值,这意味着它没有被关闭。
当您尝试使用StreamWriter
打开文件时,它已经打开,这将失败。
在这种情况下,完全忽略File.Create
。 StreamWriter
的构造函数将为您创建文件:
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)) {}
将允许您保持代码完好无损并解决问题?