我想创建和打开一个文件,但只有当它不存在。 我不想使用一个File.Exists,因为它创建具有相同名称的文件后,线程通过开关。
如何检查是否异常System.IO.IOException是由现有的文件引起的? 我不喜欢解析错误味精(即使寿它可以像.indexOf简单(“存在”))
我应该怎么做呢?
我想创建和打开一个文件,但只有当它不存在。 我不想使用一个File.Exists,因为它创建具有相同名称的文件后,线程通过开关。
如何检查是否异常System.IO.IOException是由现有的文件引起的? 我不喜欢解析错误味精(即使寿它可以像.indexOf简单(“存在”))
我应该怎么做呢?
你应该避免以往任何时候都使得基础上,Exception.Message属性的内容逻辑的决定。 这被定义为人类可读的消息,而不是东西一个程序来读取。 这样的信息如有变更,恕不另行通知。
人类可读的消息经常改变,使他们更具可读性人类。 这不会使你的程序更快乐。
正如你或许可以告诉,这取决于人类可读的消息程序逻辑的问题是我的忌讳 - 我不会告诉你多久,因为这会让我觉得自己老了。 这已经心烦意乱我从东西应该是很明显的。
请检查如果你得到一个System.IO.FileNotFoundException当文件不存在。 试捕,与其IOException异常。
我不知道他想打开该文件,如果它已经存在于所有。
我觉得他实际上是后FileMode.CreateNew
这将抛出IOException
,如果该文件已经存在,但在其他方面会创建并打开它。
你可以随时检查File.Exists()......从内部异常的catch块。 你不想检查,因为线程的前 - 所以请你已经知道后,你有问题。
假设你不是突然删除从不同的线程文件,这将是这样做的一个简单而明显的方式。
不要忘记,File.Exists本身可能会导致异常,所以一定要再次抓住它。
这里最好的选择是打开文件进行写入时使用的CreateNew选项。
有简单的检查磁盘上的文件的存在,没有可靠的方法。 您可以检查的唯一的事情是,是否使用到一个文件,可以在磁盘上仍然存在于该进程至少获得了有限形式的。
即使你门都可以获得来自您的应用程序的文件,你不能可靠地防止其他应用程序从创建/删除文件。 即使有足够的文件系统级锁,用户可以像乘坐USB钥匙从计算机中邪恶的东西。
接近这类问题的最好办法就是用开放的选项,如CreateNew。 这将允许该文件是否不存在在时间的创作尝试点的操作才能成功。 你能赶上在这一点上的异常,并试图推断,如果它是从现有的文件或其他一些非法访问异常。
像File.Exist方法造成安全的假象,以您的代码库,并应在支票更加严格的审查。
您可以使用File.Open,并调用它FileMode.OpenOrCreate 。
根据注释:好吧,怎么样FileMode.CreateNew? 然后,如果有一个已经,你会得到一个IOException,否则,做一个新的。