c#在不使用{}的情况下写入文件

Jus*_*leb 5 .net c# file-io

我正在编写一个小应用程序,我希望将操作结果写入文件.

基本上我想要做的是打开文件流(我正在考虑FileStream,但我愿意接受建议),将数据写入文件,然后在以后关闭它.

所以我有一个名为ReportFile的类,方法有:

.Create( string path )

.WriteInfo( string a, string b, string c ) ; //Or something like this...

//Then sometime in the future

.Close()
Run Code Online (Sandbox Code Playgroud)

因此,使用ReportFile类的类将创建一个实例,WriteInfo(..)多次调用,直到完成它需要做的任何事情,然后Close()在将来的某个时刻调用.

现在我知道我需要在ReportFile类上实现一个Dispose模式,以确保如果有任何问题,那么文件的句柄会得到适当的处理.

但是到目前为止我还没有找到任何关于interweb的东西,显示保持文件打开的好方法,然后检查是否需要关闭,大多数示例只是打开文件进行写入,然后关闭它 - 所有都在一个using{}结构中.

ReportFile类中,我希望能够检查FileStream实例是否未关闭,以便我可以关闭它并释放资源.

有人知道参考或任何其他建议的良好链接?

(哦,我应该提到我不做C#全职,这只是一个爱好的事情,所以如果这是一个愚蠢的问题,我的道歉;-)

Ash*_*Ash 3

您必须保持文件打开状态是否有特殊原因?

在这种情况下,我只需每次使用 FileMode.Append 打开文件(或将append=true 传递给 StreamWriter ctor),然后使用 using 再次关闭它。例如:

void WriteInfo(string text)
{
    // Second parameter to StreamWriter ctor is append = true
    using(StreamWriter sw = new StreamWriter(logFilePath, true))
    {
         sw.WriteLine(text);
    }
}
Run Code Online (Sandbox Code Playgroud)

采用这种方法,您实际上不需要 Create() 或 Close() 方法。如果文件不存在,append=true 将创建该文件。

  • @JustAPleb,我知道你来自哪里,但是打开/关闭不应该成为瓶颈。写入文件的速度将会变慢,当文件大小增大时甚至会更慢。进行一些性能测试,如果您确实发现这是一个问题,那么缓冲对内存的写入和批处理文件访问将带来最大的性能提升。顺便说一句,你不能使用 log4net 或其他一些经过验证的日志库吗? (2认同)