如何检测现有文件导致的System.IO.IOException?
我想创建并打开一个文件,但前提是它不存在。 我不想使用File.Exists,因为一个线程在创建一个具有相同名称的文件后通过切换。
我如何检查exceptionSystem.IO.IOException是否由文件存在引起? 我不想解析错误消息(即使它可以像.indexOf一样简单(“存在”))
我该怎么做?
您应该避免根据Exception.Message属性的内容做出逻辑决策。 这被定义为人类可读的消息,而不是程序要读取的消息。 此类消息如有更改,恕不另行通知。
人类可读的消息通常会发生变化,使其对人类更具可读性。 这不会让你的程序更快乐。
正如你可能会说的那样,依赖于人类可读信息的程序逻辑问题是我的一个小小的问题 – 我不会告诉你多长时间,因为这会让我觉得自己老了。 这让我分心了本来应该是显而易见的事情。
请检查当文件不存在时是否收到System.IO.FileNotFoundException 。 尝试捕获它而不是IOException。
如果它已经存在,我不确定他是否想要打开文件。
我认为他实际上是在FileMode.CreateNew
之后,如果文件已经存在,这将抛出IOException
,否则将创建并打开它。
你总是可以从exceptioncatch块的WITHIN中检查File.Exists()…. 您之前不想检查因为线程 – 所以在您已经知道有问题之后检查。
假设您没有突然从另一个线程中删除该文件,这将是一种简单明了的方法。
不要忘记File.Exists本身可能会导致exception,所以一定要再次捕获它。
这里最好的选择是在打开文件进行写入时使用CreateNew选项。
有一种简单的方法可以检查磁盘上是否存在文件。 您唯一可以检查的是文件是否曾经存在并且可能仍然存在于磁盘上,该进程至少具有有限的访问权限。
即使您从应用程序中获取对文件的所有访问权限,也无法可靠地阻止某些其他应用程序创建/删除该文件。 即使有足够的文件系统级别锁定,用户也可以做出各种各样的事情,例如从计算机中取出USB密钥。
解决此类问题的最佳方法是使用CreateNew等开放选项。 这将允许操作仅在文件在尝试创建的时间点不存在时才成功。 您可以在此时捕获exception,并尝试推断它是来自现有文件还是其他一些无效访问exception。
像File.Exist这样的方法会给代码库带来错误的安全感,并且应该在签入时仔细检查。
您可以使用File.Open并使用FileMode.OpenOrCreate调用它。
每条评论:好的,FileMode.CreateNew怎么样? 然后,如果已经有一个,你将得到一个IOException,否则,创建一个新的。
上述就是C#学习教程:如何检测现有文件导致的System.IO.IOException?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/988447.html