如果创建目录不存在,如何创建目录?

时间:2010-06-02 06:14:59

标签: c# .net file-io

我这里有一段代码,如果目录不存在则会中断:

System.IO.File.WriteAllText(filePath, content);

在一行(或几行)中,是否可以检查导致新文件的目录是否不存在,如果不存在,是否可以在创建新文件之前创建它?

我正在使用.NET 3.5。

6 个答案:

答案 0 :(得分:348)

创建

(new FileInfo(filePath)).Directory.Create()在写入文件之前。

....或者,如果存在,则创建(否则不执行任何操作)

System.IO.FileInfo file = new System.IO.FileInfo(filePath);
file.Directory.Create(); // If the directory already exists, this method does nothing.
System.IO.File.WriteAllText(file.FullName, content);

答案 1 :(得分:102)

您可以使用以下代码

  DirectoryInfo di = Directory.CreateDirectory(path);

答案 2 :(得分:30)

正如@hitec所说,你必须确保你拥有正确的权限,如果你这样做,你可以使用这一行来确保目录的存在:

Directory.CreateDirectory(Path.GetDirectoryName(filePath))

答案 3 :(得分:1)

将文件移动到不存在的目录的一种优雅方法是为本机FileInfo类创建以下扩展名:

public static class FileInfoExtension
{
    //second parameter is need to avoid collision with native MoveTo
    public static void MoveTo(this FileInfo file, string destination, bool autoCreateDirectory) { 

        if (autoCreateDirectory)
        {
            var destinationDirectory = new DirectoryInfo(Path.GetDirectoryName(destination));

            if (!destinationDirectory.Exists)
                destinationDirectory.Create();
        }

        file.MoveTo(destination);
    }
}

然后使用全新的MoveTo扩展名:

 using <namespace of FileInfoExtension>;
 ...
 new FileInfo("some path")
     .MoveTo("target path",true);

选中Methods extension documentation

答案 4 :(得分:-1)

您可以使用File.Exists检查文件是否存在,并根据需要使用File.Create创建该文件。确保检查是否有权在该位置创建文件。

一旦确定文件存在,就可以安全地写入文件。虽然作为预防措施,您应该将代码放入try ... catch块并捕获函数可能引发的异常,如果事情没有完全按计划进行。

Additional information for basic file I/O concepts

答案 5 :(得分:-2)

var filePath = context.Server.MapPath(Convert.ToString(ConfigurationManager.AppSettings["ErrorLogFile"]));

var file = new FileInfo(filePath);

file.Directory.Create();如果目录已存在,则此方法不执行任何操作。

var sw = new StreamWriter(filePath, true);

sw.WriteLine(Enter your message here);

sw.Close();