c#Directory.CreateDirectory(path),我应该先检查路径是否存在吗?

She*_*don 11 c# directory file

我需要将一些文件复制到一个目录中,但有时该目录尚不存在,必须先创建.大多数情况下,目录将存在,因为它只需要创建一次.

我知道我可以放在Directory.CreateDirectory()文件副本之前,CreateDirectory()如果目录已经存在则会返回.

string destFolder; // path to destination
string sourceFolder; // path to source
Directory.CreateDirectory( destFolder ); // this will work even if destFolder exists
File.Copy( sourceFolder + sourceFileName, destFolder + sourceFileName );
Run Code Online (Sandbox Code Playgroud)

但我知道几乎在所有情况下目标文件夹都已存在,因此检查它是否存在是否更快,而不是CreateDirectory()反正调用.

if( !Directory.Exists( destFolder ) ) // check if it exists first
{
    Directory.CreateDirectory( destFolder );
}
// now move on to using the folder
Run Code Online (Sandbox Code Playgroud)

考虑到用户只会做一次,我真的不在乎创建目录需要多长时间.我更感兴趣的是,if声明是否Directory.Exists()Directory.CreateDirectory()确定目录已存在所需的时间更快.

Directory.CreateDirectory()虽然它可能存在,但每次打电话都"感觉"浪费,所以我"先感觉更好",但是它仍然是一个函数调用,所以我真的甚至通过额外的代码来获得优势if陈述和Directory.Exists()检查?

Mar*_*own 15

您可以在Microsoft参考源中检查Directory类的代码.首先Directory.CreateDirectory做的是调用Directory.Exists(或内部等效的,InternalExists).所以使用这两种方法你就是这样写的:

if (!Directory.Exists(dir))
{
    if (!Directory.Exists(dir))
    {
        Directory.CreateDirectory(dir);
    }
}
Run Code Online (Sandbox Code Playgroud)

我个人不会做Exists检查.


Ree*_*sey 5

没有理由先检查是否存在。 Directory.CreateDirectory已经为您处理了这种情况。从文档

在指定路径中创建所有目录和子目录,除非它们已经存在。

内部完成的工作将是差不多的-但如果它存在,你要检查两次,这会减慢速度,因为Directory.Exists必须做所有相同的内部正常化。有关详细信息,请参阅参考来源