如何通过现有的文件来检测System.IO.IOException原因是什么?(How to det

2019-07-29 18:00发布

我想创建和打开一个文件,但只有当它不存在。 我不想使用一个File.Exists,因为它创建具有相同名称的文件后,线程通过开关。

如何检查是否异常System.IO.IOException是由现有的文件引起的? 我不喜欢解析错误味精(即使寿它可以像.indexOf简单(“存在”))

我应该怎么做呢?

Answer 1:

你应该避免以往任何时候都使得基础上,Exception.Message属性的内容逻辑的决定。 这被定义为人类可读的消息,而不是东西一个程序来读取。 这样的信息如有变更,恕不另行通知。

人类可读的消息经常改变,使他们更具可读性人类。 这不会使你的程序更快乐。


正如你或许可以告诉,这取决于人类可读的消息程序逻辑的问题是我的忌讳 - 我不会告诉你多久,因为这会让我觉得自己老了。 这已经心烦意乱我从东西应该是很明显的。

请检查如果你得到一个System.IO.FileNotFoundException当文件不存在。 试捕,与其IOException异常。



Answer 2:

我不知道他想打开该文件,如果它已经存在于所有。

我觉得他实际上是后FileMode.CreateNew这将抛出IOException ,如果该文件已经存在,但在其他方面会创建并打开它。



Answer 3:

你可以随时检查File.Exists()......从内部异常的catch块。 你不想检查,因为线程的前 - 所以请你已经知道后,你有问题。

假设你不是突然删除从不同的线程文件,这将是这样做的一个简单而明显的方式。

不要忘记,File.Exists本身可能会导致异常,所以一定要再次抓住它。



Answer 4:

这里最好的选择是打开文件进行写入时使用的CreateNew选项。

有简单的检查磁盘上的文件的存在,没有可靠的方法。 您可以检查的唯一的事情是,是否使用到一个文件,可以在磁盘上仍然存在于该进程至少获得了有限形式的。

即使你门都可以获得来自您的应用程序的文件,你不能可靠地防止其他应用程序从创建/删除文件。 即使有足够的文件系统级锁,用户可以像乘坐USB钥匙从计算机中邪恶的东西。

接近这类问题的最好办法就是用开放的选项,如CreateNew。 这将允许该文件是否不存在在时间的创作尝试点的操作才能成功。 你能赶上在这一点上的异常,并试图推断,如果它是从现有的文件或其他一些非法访问异常。

像File.Exist方法造成安全的假象,以您的代码库,并应在支票更加严格的审查。



Answer 5:

您可以使用File.Open,并调用它FileMode.OpenOrCreate 。

根据注释:好吧,怎么样FileMode.CreateNew? 然后,如果有一个已经,你会得到一个IOException,否则,做一个新的。



文章来源: How to detect System.IO.IOException cause by existing file?