我是否需要检查目录/文件是否存在?

时间:2013-08-12 02:16:40

标签: c# file directory

哪一个代码更好?

代码1:

if (!Directory.Exists("DirectoryPathHere"))
    Directory.CreateDirectory("DirectoryPathHere");

代码2:

Directory.CreateDirectory("DirectoryPathHere");

我认为 Code2 因为我看到它没有给出任何错误,并且当文件夹已经存在时它没有创建新文件夹,所以我检查文件夹存在是没用的。正确?

5 个答案:

答案 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