File.Exists方法是否获得了大量资源?

Dev*_*per 4 .net c#

那么更好的是什么?要使用这样的结构:

if (File.Exist(fileName))
{
    // do something with file...
}
Run Code Online (Sandbox Code Playgroud)

只是

try 
{
    // do something with file.
}
catch(Exception ex)
{
}
Run Code Online (Sandbox Code Playgroud)

使用方法File.Exist()会花费很多吗?

谢谢!

小智 11

前者有一个竞争条件:另一个进程可能会在File.Exists返回true 后删除该文件,但在打开它之前.后者没有.即使您事先检查,如果要忽略不存在的文件,仍应捕获异常.

所以应该是

if (File.Exists(fileName))
{
    try
    {
        // ...
    }
    catch (FileNotFoundException)
    { }
}
Run Code Online (Sandbox Code Playgroud)

要么

try
{
    // ...
}
catch (FileNotFoundException)
{ }
Run Code Online (Sandbox Code Playgroud)

前者重复检查,如果文件位于网络共享上,则可能会很慢,后者会针对非异常情况引发异常(会被处理),从而使调试变得复杂.两者都有其优点.就个人而言,我通常选择第二个,但要么是好的.


Cla*_*edi 5

异常不应该用于处理应用程序的流程,其目的是避免异常,而不是将它们视为执行流程的正常部分.

对于99.999%的应用程序,如果存在性能差异,则不会明显.如果文件应该在那里并且找不到特殊情况,你可以使用该 try catch块,否则我会说你应该采用这种File.Exist方法.