Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top