如果目录不存在,我这里有一段代码会中断:
System.IO.File.WriteAllText(filePath, content);
在一行(或几行)中,是否可以检查导致新文件的目录是否不存在,如果不存在,请在创建新文件之前创建该目录?
我正在使用.NET 3.5。
如果目录不存在,我这里有一段代码会中断:
System.IO.File.WriteAllText(filePath, content);
在一行(或几行)中,是否可以检查导致新文件的目录是否不存在,如果不存在,请在创建新文件之前创建该目录?
我正在使用.NET 3.5。
Answers:
(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);
Task.Run(() => );
。
您可以使用以下代码
DirectoryInfo di = Directory.CreateDirectory(path);
Directory.CreateDirectory
完全符合您的要求:如果目录不存在,它将创建目录。无需先进行显式检查。
path
是文件而不是目录,则抛出IOException 。msdn.microsoft.com/zh-CN/library/54a0at6s(v=vs.110).aspx
将文件移动到不存在的目录的一种优雅方法是为本机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);
检查方法扩展文档。
您可以使用File.Exists来检查文件是否存在,并根据需要使用File.Create创建它。确保检查是否有权在该位置创建文件。
一旦确定文件存在,就可以安全地对其进行写入。虽然作为预防措施,您应该将代码放入try ... catch块中,并捕获如果事情未按计划进行的话函数可能引发的异常。