我需要将一些文件复制到一个目录中,但有时该目录还不存在,必须先创建。大多数情况下,目录将存在,因为它只需要创建一次。
我知道我可以在文件副本之前放置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()
检查来获取代码来获得优势吗?
答案 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(...))
版本所花费的时间。如果目录已经存在并且您不应该关心它,那么差异将非常小,因为通过优化这些事情您将无法获得性能。