【问题标题】:Difference between 'File.Open()' and 'new FileStream()''File.Open()' 和 'new FileStream()' 之间的区别
【发布时间】:2010-03-03 22:07:06
【问题描述】:

有什么区别,如果有的话?

【问题讨论】:

    标签: c# .net file-io


    【解决方案1】:

    无。

    File.Open 在内部只不过是:

    public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share)
    {
        return new FileStream(path, mode, access, share);
    }
    

    如果您不使用指定 FileAccess 和 FileShare 的重载,它会为您指定(使用 FileShare.None 和 FileAccess.Write on append 或 ReadWrite 否则)。

    话虽如此,这是一个实现细节,而不是documentation 的一部分。从技术上讲,未来的 .NET Framework 版本可能使用不同的实现,尽管我认为这不太可能。

    【讨论】:

      【解决方案2】:

      这种重复在 .NET 框架中非常少见。但是有一个关于这个的故事,由 Krzysztof Cwalina 在this lecture 中讲述。他们对框架的早期版本进行了可用性研究,请一群有经验的(但与 .NET 无关的)程序员使用 FileStream 和 StreadReader/Writer 类编写一些代码。

      它并不顺利,他们得到了 100% 的失败率。他们的回应是向 System.IO.File 类添加方法,使用“最有可能落入成功的坑”的方法。

      顺便说一句,很酷的视频,如果您完全了解框架看起来如此的原因。

      最好发布一个真正的答案:File.Open() 方法调用 FileStream 构造函数,传递最有可能做正确事情的 FileAccess 和 FileShare(如果您没有指定它们)的值。即 FileAccess.ReadWrite 和 FileShare.None。

      【讨论】:

      • 已更新。注意它是一个 500MB 的 .zip 文件。
      • 链接再次断开
      • 还是坏了 ;-)
      • 再次更新,现在在 YouTube 上。嗯,对于一个甚至没有被选为答案并且无法获得足够选票的答案来说,这很麻烦。当心未来的 SO 贡献者,这就像青少年性行为。五分钟的乐趣,但你会在余生中支持它。
      • 而且,FWIW,有问题的解释似乎开始于视频的 44:00 左右。
      【解决方案3】:

      File.Open() 是一种方便的方法。在内部它是这样实现的:

      public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share)
      {
          return new FileStream(path, mode, access, share);
      }
      

      【讨论】:

      • ...与其兄弟 File.OpenRead 和 File.OpenText 一起
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 2010-11-26
      • 1970-01-01
      • 2020-09-24
      • 2016-10-04
      • 2015-07-01
      • 1970-01-01
      相关资源
      最近更新 更多