如果创建文件不存在,如何创建目录?
Posted
技术标签:
【中文标题】如果创建文件不存在,如何创建目录?【英文标题】:How do I create directory if it doesn't exist to create a file? 【发布时间】:2011-02-26 16:15:58 【问题描述】:如果目录不存在,我这里有一段代码会中断:
System.IO.File.WriteAllText(filePath, content);
是否可以在一行(或几行)中检查指向新文件的目录是否不存在,如果不存在,则在创建新文件之前创建它?
我正在使用 .NET 3.5。
【问题讨论】:
If a folder does not exist, create it的可能重复 @TimSchmelter,“可能重复”是一种清理方法 - 关闭类似问题并保留最佳答案。日期不是必需的。见meta.stackexchange.com/questions/147643/…如果你同意它需要澄清,请投票meta.stackexchange.com/questions/281980/… 【参考方案1】:创建
(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);
【讨论】:
优雅的解决方案,因为它可以处理需要创建嵌套文件夹的情况。 谢谢!我看到了***.com/questions/9065598,但我想从文件的绝对路径开始,不想处理分割路径。现在我知道您可以从 FileInfo 实例访问目录。 是否有异步方式来做到这一点? 我想你可以用Task.Run(() => );
做到这一点。
@JoePhillips,你可以使用WriteAllTextAsync
【参考方案2】:
您可以使用以下代码
DirectoryInfo di = Directory.CreateDirectory(path);
【讨论】:
Directory.CreateDirectory
完全符合您的要求:如果目录尚不存在,则创建该目录。 无需先进行明确检查。
如果path
是文件而不是目录,则抛出 IOException。 msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx【参考方案3】:
正如@hitec 所说,您必须确保您拥有正确的权限,如果这样做,您可以使用此行来确保目录的存在:
Directory.CreateDirectory(Path.GetDirectoryName(filePath))
【讨论】:
【参考方案4】:将文件移动到不存在的目录的一种优雅方法是为原生 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。
【讨论】:
【参考方案5】:您可以使用File.Exists 检查文件是否存在,并在需要时使用File.Create 创建它。确保检查您是否有权在该位置创建文件。
一旦您确定文件存在,您就可以安全地对其进行写入。尽管作为预防措施,您应该将代码放入 try...catch 块中,并捕获如果事情没有完全按计划进行时函数可能引发的异常。
Additional information for basic file I/O concepts.
【讨论】:
我最初误读了您想要写入可能不存在的文件的问题。不过,文件和目录 IO 的概念基本相同。【参考方案6】: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();
【讨论】:
以上是关于如果创建文件不存在,如何创建目录?的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB。写入文本文件或创建它,如果它不存在。将图形保存在目录中,如果不存在则创建它