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

本文关键字:复制 重命名 如果 存在 | 更新日期: 2023-09-27 18:37:15

假设我有目录 1 和目录 2,每个目录都可以包含文件或子目录。到目前为止,我所拥有的是,如果我想将"目录 2"重命名为"目录 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 吗?有没有更简单的方法来重载.移动功能以移动文件而不考虑是否存在错误?

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

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

因此,在回答您的直接问题时,您必须针对每个子目录,以防目标存在并且其中有内容。 如果没有,您可以随时擦除它并使用MOVE-ing。

看这里: Directory.Move 不起作用(文件已经存在)

我会这样做:

if(Directory.Exists(destinationPath))
{
    Directory.Delete(destionatPath, true /* recusively nuke everything */ );
}
Directory.Move(sourcePath, destinationPath);

不能使用 Directory.Move 方法将文件移动到现有文件夹中。例如,在这种情况下,您必须在文件级别使用 foreach 循环手动移动文件。Directory.Move 仅在目标目录未退出时才有效。但是,您可以检查该目录是否已存在,或者尝试并处理 IOException 异常,以便仅在必要时执行 foreach。