Windows:Перезаписать используемый файл
Вопрос
Я пытаюсь написать утилиту, которая позволит перемещать файлы в Windows, и когда она найдет используемый файл, установит, что этот файл будет перемещен при перезагрузке.
Похоже , что MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240 (ПРОТИВ 85).aspx) является правильным вызовом для этого, однако я не могу понять, какой код ошибки я ищу в GetLastError (http://msdn.microsoft.com/en-us/library/ms679360 (ПРОТИВ 85).aspx), чтобы убедиться, что файл использовался.
Я хочу, чтобы утилита выходила из строя при возникновении реальной проблемы с разрешениями.Есть ли какой-либо способ отличить ошибку, которую вы не можете туда записать, от ошибки перезаписи при использовании?
Кроме того, если у меня есть файлы, которые я перемещаю во временную папку пользователя, будут ли они удалены до отложенного переименования?
Решение
Ты должен позвонить Создать файл сначала нужно посмотреть, используется ли файл.
Чтобы узнать, используется ли файл:
Если вы получаете действительный дескриптор файла, то вы знаете, что у файла нет конфликтующих разрешений на общий доступ с процессом, у которого уже открыт этот файл.
Если вы укажете no sharing access (0 для параметра dwShareMode вызова CreateFile), то вы не получите дескриптор файла, если какой-либо другой процесс в данный момент каким-либо образом использует этот файл.GetLastError в этом случае вернул бы: ERROR_SHARING_VIOLATION (32)
Чтобы узнать, есть ли проблемы с безопасностью при доступе к файлу:
Чтобы узнать, есть ли проблема с разрешениями доступа к этому файлу, вызов CreateFile также завершится неудачей, но с другим GetLastError .Вы получите: ERROR_ACCESS_DENIED (5)