我正在使用CopyFileEx
复制具有该功能的文件。移动文件有什么类似的吗?请记住,并非所有动作都很快 - 移动到不同的驱动器实际上是一个副本。
我现在的解决方案是复制并删除原始文件,如果移动到另一个根目录,并简单地移动(并希望它实际上只是指向文件的指针的变化),如果它是到同一根目录。
是否有直接的解决方案(如CopyFileEx
)?
答案 0 :(得分:3)
MoveFileTransacted或MoveFileWithProgress可能更合适?我相信可以取消。
BOOL WINAPI MoveFileWithProgress(
__in LPCTSTR lpExistingFileName,
__in_opt LPCTSTR lpNewFileName,
__in_opt LPPROGRESS_ROUTINE lpProgressRoutine,
__in_opt LPVOID lpData,
__in DWORD dwFlags
);
当跨文件移动文件时,如果lpProgressRoutine由于用户取消操作而返回PROGRESS_CANCEL,则MoveFileWithProgress将返回零,GetLastError将返回ERROR_REQUEST_ABORTED。现有文件保持不变。
当跨文件移动文件时,如果lpProgressRoutine由于用户停止操作而返回PROGRESS_STOP,则MoveFileWithProgress将返回零,GetLastError将返回ERROR_REQUEST_ABORTED。现有文件保持不变。
答案 1 :(得分:2)
使用MoveFileWithProgress并从PROGRESS_CANCEL
返回lpProgressRoutine
。
答案 2 :(得分:1)
我会使用SHFileOperation
API,请参阅此处了解.NET C#包装器:
https://stackoverflow.com/a/3282481/559144
并在此处提及:http://pinvoke.net/default.aspx/shell32.SHFileOperation