我应该只配置FileStream吗?

时间:2013-03-14 19:39:48

标签: c# .net

我有一个只读的FileStream,它是一个方法局部变量:

public void SomeMethod()
{
   var fileStream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
   ... //some stream operations
}

我应该在方法结束时调用Dispose(显式地或通过“using”)吗?它会改变什么?

6 个答案:

答案 0 :(得分:4)

它的作用并不重要,IDisposableFileStream实现,因此您需要在使用完后隐式或明确地调用Dispose。这是在代码中使用类的合同的一部分。

答案 1 :(得分:3)

我认为最好将其包含在using语句中。如果您真的希望代码是健壮的,那么您还需要异常处理。它会像现在一样工作,这只是不好的做法。

答案 2 :(得分:3)

必须处置任何实现IDisposable的实例,并通过using语句将其处理掉。

不要认为特别分析每个案例会有所帮助。

答案 3 :(得分:2)

如果您没有处置,{GC <1>}将在GC启动(非确定性)之前关闭。

在此之前,您将持有一个打开的文件句柄,阻止某些类型的文件访问(例如写入,删除)。

请注意,指定FileStream不一定有帮助 - 如果其他作者尝试使用FileShare.ReadWrite打开文件(例如通过调用FileShare.None),他将无法执行此操作所以直到你关闭文件。

所以,是的,请使用File.OpenWrite语句关闭文件。

答案 4 :(得分:0)

如果物品可以丢弃,您应该在不再需要的时候将其丢弃。来自FileStream Class主题:

  

如果进程因文件的一部分被锁定或关闭文件而终止   具有出色锁定的行为未定义。

答案 5 :(得分:0)

正如大家的建议:每隔IDisposable处理一次,最好是using

现在对于文件,当你真的想阻止其他人访问/修改文件时,可能会有特殊情况。在这种情况下,你仍然会在某个时候处理文件,但是这个&#34;某些点&#34;可以在代码/应用程序生命周期的后期显着。