从路径创建文件,如果子目录不存在则创建子目录

17

在我的应用程序配置中有一个路径,例如 "logs\updater\updater.log"。

启动应用程序时,我想要创建文件updater.log,并在需要的情况下创建所有子文件夹。

因此,如果明天我的用户更改配置中的路径为 "logs\mypathisbetter\updater.log",我的应用程序将继续工作并将日志写入新文件。

File.CreateFileInfo.CreateStreamwriter.Create或者其他类似的方法能够实现此功能吗?

还是说我需要先检查文件夹是否存在?

我在网络上找不到对这个问题的明确答案。


http://msdn.microsoft.com/en-us/library/54a0at6s.aspx - skst
3个回答

20

使用一点代码解决:

private static void EnsureDirectoryExists(string filePath) 
{ 
  FileInfo fi = new FileInfo(filePath);
  if (!fi.Directory.Exists) 
  { 
    System.IO.Directory.CreateDirectory(fi.DirectoryName); 
  } 
}

非常抱歉这篇帖子太新手了... 谢谢大家!:-)


你的方法很适合将脚本模块化。 - Aaron C

12
不,它们似乎都没有 - 我相信你会从三个中得到DirectoryNotFoundException。
你需要先执行类似Directory.CreateDirectory(path)的操作。
编辑:
对于一个包括文件名的路径,可以尝试使用一个更全面的解决方案:
    Directory.CreateDirectory(Path.GetDirectoryName(fullPath));

    TextWriter writer = new StreamWriter(fullPath);
    writer.WriteLine("hello mum");
    writer.Close();

但请记住,您还需要进行一些错误处理,以便编写器始终在“finally”块中关闭。


实际上,我也尝试过。 有什么最佳实践来完成这项工作吗? 有一些想法吗? :-) - Ferdinando Santacroce
使用少量代码解决: private static void CreateFile(string filePath) { FileInfo fi = new FileInfo(filePath); if (!fi.Directory.Exists) { System.IO.Directory.CreateDirectory(fi.DirectoryName); } } - Ferdinando Santacroce
你不能在评论中真正地实现它。你可以编辑你的问题并将其包含在内,或者如果它是一个答案,你总是可以回答自己的问题并将其放在那里。(有关如何格式化问题和答案,请参见此处:http://stackoverflow.com/editing-help) - Grant Crofton

5
如果您只想在C#中创建一个文件夹/目录,而该文件夹/目录不存在,则另一种选择是简单地执行以下操作:
// using System.IO;
if (!Directory.Exists(destination))
{
    Directory.CreateDirectory(destination);
}

这会创建所需路径的子目录吗? - Kingsley
是的,它也会创建子目录。 - Michael Presečan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接