Я использую функцию ReplaceFile Win32 как часть операции для получения атомарного поведения.
Из трех специальных кодов ошибок для этой функции я смог воспроизвести и восстановить (откат) из двух: ERROR_UNABLE_TO_MOVE_REPLACEMENT и ERROR_UNABLE_TO_REMOVE_REPLACED.
Мои вопросы связаны с третьим кодом ошибки: ERROR_UNABLE_TO_MOVE_REPLACEMENT _2 .
- Кто-нибудь видел этот код ошибки? При каких условиях это возможно?
- Есть идеи, как воспроизвести эту ошибку, чтобы я мог проверить путь в своем коде, который восстанавливается из нее?
- Я понял из документации, что для восстановления (отката) после этой ошибки мне нужно будет переименовать замененный файл обратно в его первоначальное имя, потому что ReplaceFile оставит его с именем файла резервной копии. Кто-нибудь может убедиться, что это фактически состояние, в котором ReplaceFile оставляет файлы?
Еще несколько подробностей, если это поможет:
- ReplaceFile вызывается с ненулевым именем файла резервной копии (фактически ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 не может произойти, если задано пустое имя резервной копии).
- Я также передаю флаг REPLACEFILE_WRITE_THROUGH.
- Все файлы существуют на одном томе NTFS.