为什么相比于File.Create,File.Open在覆盖现有文件时更好?

7

这与另一个SO问题有关:如何覆盖现有文件

最佳答案是:

FileStream file = File.Open("text.txt", FileMode.Create);

我的回答是这样的:

FileStream fs = System.IO.File.Create(fileName);

截至我撰写此问题时,赞成Open的得票数为14-0。

如果投票是好与坏解决方案的指标,这让我有些疑惑:

我是否忽略了一些使选择Open比选择Create更好的方法?

4个回答

8

对我来说,我非常清楚File.Open("...", FileMode.Create)的作用,因为我可以将鼠标悬停在FileMode.Create上,这会告诉我它每次都会创建一个新文件。而File.Create("...")没有类似的工具提示来表明它会这样做。


2
这实际上让我有点笑了。关于工具提示的编码决策。很有趣,但我想它和任何东西一样都是一个好的区分因素,因为它提供了更多信息,这对于开发至关重要。看起来很随机,但实际上是有道理的。谢谢 :) - Erich Mirabal

2

我知道只有一个地方可以寻找这个问题的答案:Reflector

结果发现两者都使用了带有完整参数的new FileStream(...!


1
那正是我所说的。它们最终都会调用相同的代码。我想这只是因为人们喜欢“打开”而不是“创建”,因为它使得你更明显地获得一个已经打开并准备好使用的文件。 - Erich Mirabal

0

好的,我也回答了Create,但是Open确实是更好的解决方案,因为你表明你希望打开一个文件,并且使用FileMode.Create表示如果文件不存在,则创建该文件。我认为这很清楚。


1
我猜是的。但是Create不是更简洁吗?此外,Open有FileMode.Create标志,我认为这使得它有点更加混淆:“我想打开,但创建它。”与“我想创建,我不在乎之前有什么。”除了这些语义之外,是否有任何情况下Open实际上会更好?也就是说,Create是否会产生Open没有的其他副作用? - Erich Mirabal

0

首先,我觉得你可能把它想多了。例如,我倾向于给第一个正确的答案点赞,并忽略其他的回答...所以先到达有一点帮助。

其次,File.Open 读起来比 System.IO.File.Open 更好,尽管它们是相同的。

第三,从可读性的角度来看,Create 不如 Open 语义相关。如果你想创建并打开文件,第一个选项更加明确。


也许我想多了。我知道当我打完答案时,可能已经有人“击败”我第一个回复了。让我感到好奇的是,其他“更难”或“更有趣”的问题可能没有那个问题得到的赞数那么高。那是一个简单的问题,所以我通常不会看到像这样为了回答谷歌或msdn只需要2秒钟的问题投票那么高。我想“打开”的明确措辞比“创建”更好地传达了语义。 - Erich Mirabal
2
@Brian:仅仅因为它是第一个回答就投票支持它是完全无意义的。应该投票支持好的回答,而不是第一个回答。 - Dirk Vollmar
@divo: 我完全同意。这被称为懒惰。只是说实话。我认为这种情况经常发生 :) - Brian Genisio
@divo:我给你的评论点了赞...我应该翻开新的一页,变得不那么懒惰。 - Brian Genisio
@divo:只是为了明确一下:我会投票赞成第一个正确的答案,而不仅仅是第一个答案。并不是要为这种行为辩解...只是在澄清。 - Brian Genisio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接