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

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

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

我使用的是。net 3.5。


当前回答

创建

(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);

其他回答

您可以使用File。存在以检查文件是否存在并使用file创建它。如果需要,可以创建。确保您检查了是否有权在该位置创建文件。

一旦确定文件存在,就可以安全地对其进行写入。尽管作为预防措施,您应该将您的代码放入try…Catch块和Catch用于在事情没有完全按计划进行时函数可能引发的异常。

有关基本文件I/O概念的附加信息。

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

CreateDirectory (Path目录。GetDirectoryName (filePath)

您可以使用以下代码

  DirectoryInfo di = Directory.CreateDirectory(path);

将文件移动到一个不存在的目录的一个优雅的方法是创建以下扩展到本地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);

检查方法扩展文档。

创建

(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);