我正在使用CopyFileEx
複製具有該功能的文件。移動文件有什麼特點嗎?請記住,並非每一個動作都很快 - 移動到另一個驅動器實際上是一個副本。有沒有辦法移動一個能夠取消中間移動的文件?
我現在的解決方案是複製並刪除原始文件,如果移動到不同的根目錄,並且只是移動(並且希望它實際上只是指向文件的指針的改變)if它是在同一個根目錄下。
有沒有簡單的解決方案(如CopyFileEx
)?
我正在使用CopyFileEx
複製具有該功能的文件。移動文件有什麼特點嗎?請記住,並非每一個動作都很快 - 移動到另一個驅動器實際上是一個副本。有沒有辦法移動一個能夠取消中間移動的文件?
我現在的解決方案是複製並刪除原始文件,如果移動到不同的根目錄,並且只是移動(並且希望它實際上只是指向文件的指針的改變)if它是在同一個根目錄下。
有沒有簡單的解決方案(如CopyFileEx
)?
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。現有文件保持不變。
使用MoveFileWithProgress並從lpProgressRoutine
返回PROGRESS_CANCEL
。
我會用SHFileOperation
API,在這裏看到了.NET C#包裝:
https://stackoverflow.com/a/3282481/559144
,也參考這裏:http://pinvoke.net/default.aspx/shell32.SHFileOperation
感謝。他們之間有什麼區別=「......作爲交易操作」是什麼意思? – ispiro
如果這個舉動是針對整個目錄的,例如他們要麼全部成功,要麼全都不成立。我相信只適用於本地NTFS移動,而不是網絡移動。 – Cylindric
交易意味着它是原子。全部或沒有。 – Bengie