'File.Open()'和'new FIleStream()'之间的区别

时间:2010-03-03 22:07:06

标签: c# .net file-io

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

3 个答案:

答案 0 :(得分:24)

无。

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或否则为ReadWrite)。

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

答案 1 :(得分:22)

这种重复在.NET框架中非常罕见。但是Krzysztof Cwalina在this lecture讲述了这个故事。他们对该框架的早期版本进行了可用性研究,要求一群经验丰富的(但不是.NET不可知的)程序员使用FileStream和StreadReader / Writer类编写一些代码。

效果不佳,他们的失败率为100%。他们通过向System.IO.File类添加方法来回应,使用“最有可能陷入成功的陷阱”的方法。

很酷的视频,如果你完全了解框架看起来的样子。

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

答案 2 :(得分:5)

File.Open()是一种便捷方法。在内部,它实现为:

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