"移动不会跨卷" - 为什么?以及如何克服?

fir*_*mer 11 c# directory file

File.Move(sourceFileName, destFileName)当源文件和目标文件位于不同的分区时,为什么它工作正常,但Directory.Move(sourceDirName, destDirName)不是?它抛出

System.IO.IOException:"源和目标路径必须具有相同的根.移动将无法跨卷工作."

我甚至尝试创建一个DirectoryInfo实例并使用该MoveTo(destDirName)方法但没有成功.

我错过了什么吗?我自己真的必须实现"移动"功能吗?(我要移动的目录非常大btw).

Ehs*_*san 9

您应该使用复制功能,然后删除.由于Move仅适用于同一驱动器. Directory.Move有条件说:

如果尝试将目录移动到其他卷,则会抛出IO异常.

  • 此外,您的"复制"链接已损坏.在某些时候是否有"Directory.Copy"功能? (3认同)

小智 5

另一种选择是添加对Microsoft.VisualBasic命名空间的引用并使用MoveDirectory可以跨卷移动的方法。

Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(sourceDirName, destDirName);
Run Code Online (Sandbox Code Playgroud)


Ben*_*igt 2

您还可以 p/invoke,SHFileOperation这与 Windows 资源管理器用于移动目录的函数相同。它将根据需要执行真正的移动或递归复制然后删除。

它还可以显示与资源管理器相同的进度 UI,只需设置一个标志即可。