我有以下代码,我收到IOException
错误。它说它正在被不同的流程使用。我没有在某处打开文件,应用程序创建文件。
这是我的代码:
在功能一:
System.IO.StreamWriter data = new System.IO.StreamWriter(@"c:\temp.txt");
data.WriteLine(temp);
data.Close()
之后,调用第二个函数来处理临时文件。与IO有关的行是:
string[] part = System.IO.File.ReadAllLines(@"c:\temp.txt");
在此函数中,string[] part
被修改并添加到最终的完整文件中:
System.IO.File.AppendAllLines(Datas.Core.outputDir + @"\" + Datas.Core.outputName + ".txt", part);
我想System.IO.ReadAllLines
函数会使文件保持忙碌状态,如何更改代码以便我可以再次访问该文件?
答案 0 :(得分:2)
方法System.IO.File.ReadAllLines()
不会保持文件繁忙,它会打开文件进行读取,然后在完成后自动再次关闭。问题可能在以下一行
System.IO.File.AppendAllLines(Datas.Core.outputDir + @"\" + Datas.Core.outputName + ".txt", part);
我认为最好使用类StreamWriter
将文本追加或写入特定文件并稍后控制编写器(类)。
以下是示例代码
string Path = @"C:\temp.txt"; // You can change this to anything you would like
StreamWriter _TextWriter = new StreamWriter(Path, true); // change to "false" if you do not want to append
然后您可以使用以下其中一项来:
!将文字附加到最后一行
_TextWriter.Write("something");
!在文件末尾创建一个新行,然后将文字追加到最后一行
_TextWriter.WriteLine("something");
完成文件处理后,使用以下代码关闭StreamWriter
_TextWriter.Close();
谢谢, 我希望你觉得这很有帮助:)
答案 1 :(得分:1)
您需要致电data.Dispose()
(而不仅仅是Close
)才能完全释放文件句柄。
答案 2 :(得分:0)
将System.IO.StreamWriter
放入using语句中,以便正确处理:
using (System.IO.StreamWriter data = new System.IO.StreamWriter(@"c:\temp.txt"))
{
data.WriteLine(temp);
}
这就是example in MSDN的呈现方式。