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

时间:2010-01-07 15:09:11

标签: c# .net file-io

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

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

所以我有一个名为 ReportFile 的课程,方法是:

.Create( string path )

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

//Then sometime in the future

.Close()

所以使用 ReportFile 类的类将创建一个实例,多次调用WriteInfo(..)直到完成它需要做的任何事情,然后在某些地方调用Close()指出未来。

现在我知道我需要在 ReportFile 类上实现一个Dispose模式,以确保在任何情况下screwey都能正确处理文件的句柄。

但是到目前为止我还没有能够在interweb上找到任何保持文件打开然后检查是否需要关闭的好方法,大多数示例只是打开文件进行写作,然后关闭它 - 所有这些都在using{}构造内。

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

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

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

6 个答案:

答案 0 :(得分:3)

ReportFile只有一个TextWriter实例变量 - 您可以在自己的Dispose()方法中进行处理。

为什么你想要一个明确的Close()方法,顺便说一下?您的呼叫者无论如何都应该使用using声明,那么他们为什么还要明确地呼叫Close

答案 1 :(得分: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);
    }
}

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

答案 2 :(得分:1)

Justa,我认为你有点过分思考这个功能。你看到使用using结构的例子的原因是使用{}和文件写是非常快速和安全的。

您可能无法每秒多次打开和关闭文件,因此无需始终保持打开状态,从而有可能在不关闭文件的情况下离开应用程序(事后PITA需要修复) 。)使用using结构可以确保资源(在这种情况下是您的文件)被正确释放和关闭。

另一条编程建议:一开始就不要担心效率。首先以最简单的方式使其工作,并在以后必要时提高速度/性能。

答案 3 :(得分:1)

public void Create(string path){   mStream = new FileStream(path); }

public void Dispose(){   if(mStream!= null)     mStream.Dispose(); }

答案 4 :(得分:0)

我建议使用“使用”构造,并在保存时保持文件打开。

一个想法可能是在内存中构建内容,然后在准备好时保存它。例如,使用StringBuilder。

答案 5 :(得分:0)

如果你只是不使用using {}结构,你可以使用IDisposable接口:http://msdn.microsoft.com/en-us/library/system.idisposable.dispose.aspx