C# 重命名目录,如果目录已存在则复制所有内容

标签 c#

假设我有目录 1 和目录 2,每个目录中都可以包含文件或子目录。到目前为止,如果我想将“Directory 2”重命名为“Directory 3”,我可以运行:

Directory.Move("path\Directory 2", "path\Directory 3");

这工作正常 - 重命名目录,该目录中的所有子目录和文件都可以使用新名称正常工作,无需处理副本。

但是,如果我尝试这样做:

Directory.Move("path\Directory 2", "path\Directory 1");

我收到错误,因为目录 1 已存在。在这种情况下,如果目录 2 无法重命名为目录 1,则目录 2 中的所有内容(文件和子目录)都应移至目录 1 中。最简单的方法是什么?我应该有一个 if 文件存在、一个 foreach 来移动所有子目录、一个 foreach 来移动所有文件吗?有没有更简单的方法来重载 .Move 函数来移动文件,而不管是否存在错误?

最佳答案

不,因为 MOVE 在文件系统级别工作,有效地重命名文件夹,或将文件夹“指针”移动到另一个位置。前者是父目录相同的情况,后者是父目录不同的情况。

因此,为了回答您的直接问题,您必须遍历每个子目录,以防目标存在并且其中包含某些内容。如果没有,您可以随时删除它并进行 MOVE-ing。

看这里:Directory.Move doesn't work (file already exist)

关于C# 重命名目录,如果目录已存在则复制所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054913/

相关文章:

c# - 使用 Crystal Reports for .net 时出错

c# - WPF Datagrid,一旦创建就可以选择或关注行?

c# - 如何在WP7应用程序中显示EULA?

c# - Url.Link 在 WebAPI 中不起作用

c# - EF插入多个相关表

基于类型的 C# 观察者?

c# - 我应该将电话号码存储为字符串还是整数?

c# - 如果有一个包罗万象,c# 服务会崩溃吗

c# - Xamarin.Forms - WPF 输入绑定(bind)替代方案?

c# - 如何完全卸载/安装 Visual Studio 2015?