2

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

4

3 回答 3

3

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

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

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

于 2012-06-15T16:44:27.073 回答
0

我会这样做:

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

Directory.Move(sourcePath, destinationPath);
于 2012-06-15T16:48:24.330 回答
0

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

于 2012-06-15T16:49:40.210 回答