有没有办法移动一个能够在中间取消移动的文件?

时间:2011-12-08 14:00:09

标签: c# winapi

我正在使用CopyFileEx复制具有该功能的文件。移动文件有什么类似的吗?请记住,并非所有动作都很快 - 移动到不同的驱动器实际上是一个副本。

我现在的解决方案是复制并删除原始文件,如果移动到另一个根目录,并简单地移动(并希望它实际上只是指向文件的指针的变化),如果它是到同一根目录。

是否有直接的解决方案(如CopyFileEx)?

3 个答案:

答案 0 :(得分:3)

MoveFileTransactedMoveFileWithProgress可能更合适?我相信可以取消。

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