Windows: перезаписать используемый файл - PullRequest
10 голосов
/ 02 апреля 2009

Я пытаюсь написать утилиту, которая позволит перемещать файлы в 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), чтобы увидеть, что файл был в использовать.

Я хочу, чтобы утилита не работала при наличии реальных проблем с разрешениями. Есть ли какой-либо способ разграничить ошибку перезаписи, которую вы не можете записать туда, и используемую?

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

1 Ответ

10 голосов
/ 02 апреля 2009

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

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

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

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


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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...