哪一个代码更好?
代码1:
if (!Directory.Exists("DirectoryPathHere"))
Directory.CreateDirectory("DirectoryPathHere");
代码2:
Directory.CreateDirectory("DirectoryPathHere");
我认为 Code2 因为我看到它没有给出任何错误,并且当文件夹已经存在时它没有创建新文件夹,所以我检查文件夹存在是没用的。正确?
答案 0 :(得分:5)
您无需检查目录是否已存在,该方法是否适合您。如果您查看MSDN:
创建路径中指定的所有目录,除非它们 已存在或除非路径的某些部分无效。路径 参数指定目录路径,而不是文件路径。如果 目录已存在,此方法不创建新目录, 但它返回现有目录的DirectoryInfo对象。
答案 1 :(得分:2)
我会使用DirectoryInfo类,检查它是否存在,如果它确实存在,也可以检查目录的权限,以防我当前的运行时权限不足以访问内容或更新目录。 您应该将异常处理应用于您使用的任何方法;例如,如果一个文件存在目录名?
答案 2 :(得分:1)
关键是CreateDirectory
方法隐式会在尝试创建目录之前检查目录是否存在。
对于代码可读性,最好先使用显式方法Directory.Exists
。
我也非常同意@SimonWhitehead的防守编程方面。显示你已经意识到坑落了......并且在你的代码中明确地对它们进行防御是一件好事:)
I think we can all see the fact that the second method does the same,
but, is it cheaper in terms of being more readable? No.
任何了解该框架的人都可能不同意,我也可以。但是:
始终将代码视为最终维护代码的人员 暴力的精神病患者谁知道你住在哪里。
http://www.codinghorror.com/blog/2008/06/coding-for-violent-psychopaths.html
编辑2:我有一种有趣的感觉,编译器会这样做。汇编程序员可以在生成IL之前检测它。
答案 3 :(得分:0)
以下是来自http://msdn.microsoft.com/en-us/library/54a0at6s.aspx
的简单代码using System;
using System.IO;
class Test
{
public static void Main()
{
// Specify the directory you want to manipulate.
string path = @"c:\MyDir";
try
{
// Determine whether the directory exists.
if (Directory.Exists(path))
{
Console.WriteLine("That path exists already.");
return;
}
// Try to create the directory.
DirectoryInfo di = Directory.CreateDirectory(path);
Console.WriteLine("The directory was created successfully at {0}.", Directory.GetCreationTime(path));
// Delete the directory.
di.Delete();
Console.WriteLine("The directory was deleted successfully.");
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
finally {}
}
}
答案 4 :(得分:0)
您无需检查它,但由于处理文件和文件夹时出现了许多问题,因此最好包含try-catch
语句,以便处理任何潜在问题:
try {
Directory.CreateDirectory("DirectoryPathHere");
}
catch (Exception ex)
{
MessageBox.Show("Error: "+ex.Message);
}
如果需要,您还可以添加finally
。