2010-05-26 103 views
2

我有一段使用Windows SHFileOperation函數和FO_MOVE操作的代碼。指定的其他標誌是FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT。如果目標驅動器已滿,SHFileOperation FO_MOVE刪除文件

當目標驅動器已滿時,觀察到一種特殊的奇怪行爲。在這種情況下,MOVE無法將文件放在目標文件夾中,但源文件也丟失了。這非常出乎意料,這導致數據丟失。

這是SHFileOperation的標準行爲嗎? 如果目標驅動器有空間,我們可以有像MOVE一樣的東西,否則將文件留在原始位置?

+0

順便說一句我知道「CreateFileEx」返回失敗狀態但刪除目錄的情況,所以不會被WinAPI的不良行爲感到驚訝。 – 2010-07-07 23:26:50

回答

0

我還沒有聽說過這個 - 聽起來像一個BUG。

通過將移動操作拆分爲FO_COPY和FO_DELETE(假設FO_COPY操作成功),最好選擇更實用的方法。

此外,如果您的實施可以檢測源卷和目標卷何時相同,您可能會獲得一些效率。在這種情況下,您應該能夠恢復到FO_MOVE。對同一卷的移動操作通常會提煉爲重命名+元數據移動。

0

如果目標文件對於目標介質或文件系統來說太大,則SHFileOperation應返回DE_FILE_TOO_LARGE(0x85)。

相關問題