IOException未处理错误

时间:2012-10-20 20:13:50

标签: c# file-io

我有以下代码,我收到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函数会使文件保持忙碌状态,如何更改代码以便我可以再次访问该文件?

3 个答案:

答案 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的呈现方式。