这是我写在文件中的功能:
FileStream file = new FileStream ("c:/Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
public void writeFile(string line, FileStream file)
{
StreamWriter writer;
TextWriter oldOut = Console.Out;
try
{
writer = new StreamWriter(file);
}
catch (Exception e)
{
Console.WriteLine("Cannot open Redirect.txt for writing");
Console.WriteLine(e.Message);
return;
}
Console.SetOut(writer);
Console.WriteLine(line);
Console.SetOut(oldOut);
writer.Close();
file.Close();
Console.WriteLine("Done");
}
这就是我的用法:
writeFile("********* Clienta *********",file);
writeFile("Centre *** " + id,file);
但是当我运行我的代码时,我得到了这个错误:
Cannot open Redirect.txt for writing
The stream can not be written.
我的代码有什么问题?
您的问题是您两次关闭文件流。第一次调用完成后,您已经关闭了文件,因此当您第二次调用时,它将尝试在关闭的文件流上创建一个流写入器。
删除file.Close
并将您的参数类型更改为StreamWriter
。在函数外创建流写入器,然后在完成文件写入后将其关闭。
尝试这样的事情:
public void WriteFile(string line, string fileName)
{
try
{
using (var sw = new StreamWriter(fileName, true))
{
sw.WriteLine(line);
}
}
catch (Exception e)
{
Console.WriteLine("Cannot open Redirect.txt for writing");
Console.WriteLine(e.Message);
return;
}
Console.WriteLine("Done");
}
现在,不要将文件流传递给函数,而要传递C:/Redirect.txt
:
WriteFile("********* Clienta *********","C:/Redirect.txt");
WriteFile("Centre *** " + id, "C:/Redirect.txt");
我会指出:这是次优的。对于此函数的每次调用,打开和关闭文件的效率都非常低。更好的方法是使用一个对象,该对象将消息写入文件中,从而跟踪StreamWriter和FileStream,然后传递该对象,以便您只打开一次文件,然后关闭一次文件。如果它是一个运行时间较长的程序,则将为每个“工作单元”(请求,定期中断等)创建这些对象之一。但是,这不是您要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句