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

时间:2014-12-19 23:34:38

标签: c# file directory

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

我知道我可以在文件副本之前放置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 );

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

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

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

感觉"我每次都打电话给Directory.CreateDirectory(),尽管它可能存在,所以我感觉更好"首先检查,但它仍然是一个函数调用,所以我真的通过使用额外的if语句和Directory.Exists()检查来获取代码来获得优势吗?

3 个答案:

答案 0 :(得分:15)

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

if (!Directory.Exists(dir))
{
    if (!Directory.Exists(dir))
    {
        Directory.CreateDirectory(dir);
    }
}

就我个人而言,我永远不会进行Exists检查。

答案 1 :(得分:3)

没有理由先检查是否存在。 Directory.CreateDirectory已经为你处理了这个案子。来自the documentation

  

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

内部完成的工作大致相同 - 但是如果存在,那么您需要检查两次,这会减慢速度,因为Directory.Exists必须执行所有操作相同的内部标准化。有关详细信息,请参阅reference source

答案 2 :(得分:-1)

您首先应该首先调用Directory.Exists()以检查该文件夹是否存在,然后仅在不存在的情况下调用Directory.CreateDirectory()。它没有使用代码,这是正确的做法。

关于运行速度更快的内容,您可以使用System.Diagnostics.Stopwatch类来比较CreateDirectory()版本和if (Directory.Exists(...))版本所花费的时间。如果目录已经存在并且您不应该关心它,那么差异将非常小,因为通过优化这些事情您将无法获得性能。