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 吗?有没有更简单的方法来重载.移动功能以移动文件而不考虑是否存在错误?
不,因为 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。