SHFileOperation FO_MOVE удаляет файл, если целевой диск заполнен - PullRequest
2 голосов
/ 26 мая 2010

У меня был кусок кода, который использует функцию Windows SHFileOperation с операцией FO_MOVE. Были указаны дополнительные флаги: FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT.

Особое странное поведение наблюдалось при переполнении целевого диска. В этом случае MOVE не удалось поместить файл в папку назначения, но исходный файл также был потерян. Это было очень неожиданно, и это привело к потере данных.

Это стандартное поведение SHFileOperation? Можем ли мы иметь что-то вроде MOVE, если на целевом диске есть место, в противном случае оставьте файл на прежнем месте?

Ответы [ 2 ]

0 голосов
/ 03 августа 2010

Операция SHFileOperation должна возвращать DE_FILE_TOO_LARGE (0x85), если файл назначения слишком велик для носителя или файловой системы назначения.

0 голосов
/ 02 августа 2010

Я не слышал об этом - звучит как БАГ.

Может быть лучше выбрать более прагматичный подход, разделив операцию перемещения на FO_COPY, за которой следует FO_DELETE (при условии, что операция FO_COPY завершилась успешно).

Кроме того, вы могли бы получить некоторую эффективность, если бы ваша реализация могла обнаружить, когда исходный и целевой тома совпадают.В этом случае вы сможете вернуться к FO_MOVE.Операция перемещения на том же томе обычно переходит к перемещению переименования + метаданных.

...