Windows: использование перезаписываемого файла

Я пытаюсь написать утилиту, которая позволит перемещать файлы в Windows, и когда она найдет файл, который будет использоваться, установит этот файл для перезагрузки.

Кажется, что MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) является правильным вызовом для этого, однако я не могу понять, какой код ошибки я ищет из GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx), чтобы увидеть, что файл использовался.

Я хочу, чтобы утилита терпит неудачу, когда есть реальная проблема с разрешениями. Есть ли способ дифференцировать вы-can't-write-there и ошибку перезаписывания при использовании?

Кроме того, если у меня есть файлы, которые я перемещаю во временную папку пользователя, они будут удалены до отложенного переименования?

Ответ 1

Сначала вы должны вызвать CreateFile, чтобы узнать, используется ли файл.

Чтобы узнать, используется ли файл:

Если вы получаете допустимый дескриптор файла, вы знаете, что у файла нет конфликтующих разрешений на доступ к процессу, у которого уже открыт этот файл.

Если вы не укажете доступ для доступа (0 к параметру dwShareMode вызова CreateFile), вы не получите дескриптор файла, если какой-либо другой процесс в настоящее время использует этот файл. GetLastError в этом случае вернет: ERROR_SHARING_VIOLATION (32)


Чтобы узнать, есть ли проблема с доступом к файлу:

Чтобы узнать, есть ли проблема с доступом к этому файлу, вызов CreateFile также завершится неудачей, но с другим GetLastError. Вы получите: ERROR_ACCESS_DENIED (5)