使用 System.IO.File.Move 时自动创建文件夹

Posted

技术标签:

【中文标题】使用 System.IO.File.Move 时自动创建文件夹【英文标题】:Auto creating folders when using System.IO.File.Move 【发布时间】:2014-10-01 18:59:17 【问题描述】:

我正在更新一个旧的 winforms 应用程序,它使用正则表达式和 System.IO.File.Move 将文件移动到新位置

在 Windows 7 下,旧应用程序运行良好。如果文件夹不存在,File.Move 会创建它

System.IO.File.Move("c:\stuff\a.txt","c:\stuff\a\file.txt");
System.IO.File.Move("c:\stuff\b.txt","c:\stuff\b\file.txt");
System.IO.File.Move("c:\stuff\c.txt","c:\stuff\c\file.txt");

但是,在 Windows 8 下,我似乎必须先手动创建路径中的每个文件夹。如果我尝试移动到尚不存在的文件夹,则会收到错误消息。有人知道解决这个问题的方法吗?我宁愿不必创建每个文件夹

注意:更新后的新应用位于 WPF 而不是 winforms 上。不确定这是否相关

【问题讨论】:

我遇到了完全相同的问题。没有可用的解决方法。我用扩展方法重载了 Move 方法。这不是很多工作,而且您的代码也不需要很多更改。 如果 sourceFileName 或 destFileName 中指定的路径无效,您将收到 DirectoryNotFoundException。 【参考方案1】:

在您File.Move() 之前,您可以这样做:

new System.IO.FileInfo("c:\\stuff\\a\\file.txt").Directory.Create();

如果“stuff”和“a”文件夹不存在,上面将创建它们。

【讨论】:

【参考方案2】:

到 2019 年:

        if (!File.Exists(destination)) 
            DirectoryInfo di = Directory.CreateDirectory(destination);
        
        File.Move(origin, destination);

别忘了补充:

using System.IO;

【讨论】:

以上是关于使用 System.IO.File.Move 时自动创建文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中重命名文件?

使用 Align 时自定义剪裁器不移动

使用 LocalDate 字段读取对象时自定义 ObjectInputStream 的意外行为

Paypal IPN - 返回时自定义为空

使用文本而不是图标时自定义 Material UI Table 图标属性的字体

滚动时自定义uitableviewcell空白