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

本文关键字:path 是否 检查 存在 CreateDirectory Directory 我应该 | 更新日期: 2023-09-27 18:34:43

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

我知道我可以把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

我真的不在乎创建目录需要多长时间,因为用户只会做一次。我更感兴趣的是带有 Directory.Exists()if 语句是否比Directory.CreateDirectory()确定目录已经存在所需的时间快。

每次调用Directory.CreateDirectory()对我来说都是">

感觉"浪费,即使它可能存在,所以我先检查"感觉更好",但无论哪种方式,它仍然是一个函数调用,所以我真的可以通过用额外的if语句和Directory.Exists()检查来丑化我的代码来获得优势吗?

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

您可以在 Microsoft 引用源中查看 Directory 类的代码。Directory.CreateDirectory做的第一件事是调用Directory.Exists(或内部等价物,InternalExists(。因此,使用这两种方法,您可以编写以下内容:

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

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

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

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

(强调我的(

内部完成的工作大致相同 - 但如果它不存在,您将检查两次,这会减慢速度,因为Directory.Exists必须执行所有相同的内部规范化。 有关详细信息,请参阅参考源。

您绝对应该先调用Directory.Exists()以检查该文件夹是否存在,然后仅在不存在时才调用Directory.CreateDirectory()。这不是丑陋的代码,这是正确的做法。

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