【发布时间】:2015-04-15 09:43:07
【问题描述】:
我最近遇到了this post,其中标记的答案是 Jon Skeet。 他在其中解释了创建空文件的不同方法,例如:
using (File.Create(filename)) ;
using (File.Create(filename)) {}
File.Create(filename).Dispose();
然后还有另一种人们推荐使用的方法:
File.Create(filename).Close();
现在,Jon 的回答详细说明了使用哪一个以及为什么等。但是答案已经过时/过时,并且没有像我想要的那样详细说明哪一个更适合确保文件已关闭,为什么。
【问题讨论】:
-
我有点喜欢其他答案之一,使用带有空字符串的
File.WriteAllText。它在底层的效率可能略低,但它将处理留给框架代码,而不是需要显式调用或通过任何类型的诡计。 (如果我在生产代码中看到using块方法,它可能需要双重处理才能完全理解它。可能会稍微更有效率,但这种双重处理可能会导致对代码行为和未来错误的误解。) -
是的,这是问这个问题的主要原因,因为我在遗留项目中找到了该代码并正在研究它。但是我自己发现此实例中的 WriteAllText 方法更令人困惑。
-
Jon 的最佳建议是将整个事情包装在一个恰当命名的方法中。事后运行性能测试、竞争条件测试等,根据需要调整到字节(如果需要的话)。但只要功能存在于一个具有好名字的抽象位置,那么使用它的其余生产代码将是清晰易懂的。
-
我想,但主要是想知道每个方法的实际功能,因为在方法中使用它很好。但如果每次我们回到原点时都失败了,只需更改更少的代码。