有什么区别,如果有的话?
答案 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);
}