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

C#重命名目录,如果目录已经存在,则复制所有内容,c#,C#,假设我有目录1和目录2,每个目录中都可以有文件或子目录。到目前为止,如果我想将“目录2”重命名为“目录3”,我可以运行: Directory.Move("path\Directory 2", "path\Directory 3"); 这工作正常-重命名目录,该目录中的所有子目录和文件都可以使用新名称正常工作,无需处理副本 但是,如果我尝试这样做: Directory.Move("path\Directory 2", "path\Directory 1"); 我得到一个错误,因为目录1已经存在

假设我有目录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在文件系统级别工作,有效地重命名文件夹,或将文件夹“指针”移动到另一个位置。前者是当父目录相同时的情况,后者是当父目录不同时的情况

所以,在回答您的直接问题时,您必须对每个子目录进行foreach,以防目标存在并且其中包含某些内容。如果没有,您可以随时删除它并继续移动


看这里:

我会这样做:

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

Directory.Move(sourcePath, destinationPath);

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

因此,基本上,一个好的策略可能是创建一个函数,该函数可以执行以下操作:if(文件夹不存在)->只需使用.move if(文件夹确实存在)->在每个子目录上运行该函数,这样我可以递归地重命名每个目录和子目录,如果它们已经存在,只需在其中移动内容即可。是吗?嘿,那容易多了!谢谢我不想删除现有的路径,只想在其中添加文件,这将是一件完全不同的事情。