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

时间:2012-06-15 16:41:30

标签: c#

假设我有目录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函数来移动文件而不管是否存在错误?

3 个答案:

答案 0 :(得分:3)

不,因为MOVE适用于文件系统级别,有效地重命名文件夹,或将文件夹“指针”移动到另一个地方。前父目录是相同的,后者是父目录不同的时候。

因此,在回答您的直接问题时,如果目标存在并且其中包含某些内容,则必须预先处理每个子目录。如果没有,您可以随时将其删除并使用MOVEING。

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

答案 1 :(得分:0)

我会这样做:

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

Directory.Move(sourcePath, destinationPath);

答案 2 :(得分:0)

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