假设我有目录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函数来移动文件而不管是否存在错误?
答案 0 :(得分:3)
不,因为MOVE适用于文件系统级别,有效地重命名文件夹,或将文件夹“指针”移动到另一个地方。前父目录是相同的,后者是父目录不同的时候。
因此,在回答您的直接问题时,如果目标存在并且其中包含某些内容,则必须预先处理每个子目录。如果没有,您可以随时将其删除并使用MOVEING。
答案 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。