哪一种代码更好?
代码1:
if (!Directory.Exists("DirectoryPathHere"))
Directory.CreateDirectory("DirectoryPathHere");
代码2:
Directory.CreateDirectory("DirectoryPathHere");
我认为Code2因为我看到它没有给出任何错误,并且当文件夹已经存在时它没有创建新文件夹,所以我认为检查文件夹是否存在是没有用的。正确的?
您不需要检查目录是否已经存在,该方法会为您完成。如果您在MSDN上查看:
除非它们已经存在或路径的某些部分无效,否则会创建路径中指定的任何和所有目录。path 参数指定目录路径,而不是文件路径。如果目录已存在,则此方法不会创建新目录,但会返回现有目录的 DirectoryInfo 对象。
我会使用 DirectoryInfo 类,检查它是否存在,如果它确实存在,检查目录的权限,以防我当前的运行时权限不足以访问内容或更新目录。您应该将异常处理应用于您使用的任何方法;例如,如果存在具有目录名称的文件怎么办?
关键是该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 之前检测到它。
这是来自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 {}
}
}
你不需要检查它,但是因为在处理文件和文件夹时会出现很多问题,最好包含一个try-catch
语句以便处理任何潜在的问题:
try {
Directory.CreateDirectory("DirectoryPathHere");
}
catch (Exception ex)
{
MessageBox.Show("Error: "+ex.Message);
}
如果需要,您也可以添加finally
。