Функция API Windows CreateFile позволяет указать желаемый доступ. Существует три варианта чтение, запись и удаление. Если вы получаете дескриптор из CreateFile, запрашивающий удаление доступа, как вы удаляете файл с помощью возвращаемого дескриптора? Функция DeleteFile принимает имя файла, а не дескриптор.
Большая картинка: При сохранении файлов из моего приложения сначала выписываюсь во временный файл, а затем удаляем "реальный" файл и переименовываем временный файл в настоящее имя. Я начал видеть проблемы с поисковыми индексаторами, или антивирус/шпионское ПО, открывающее файл для чтения, но не позволяя удалять. Это приводит к сбою моего сохранения при перемещении файлов. Я изменил свой открытый код, чтобы запросить доступ к нему, чтобы убедиться, что я могу удалить файл, когда придет время для сохранения.
Все работает отлично, но у меня все еще есть пробел, когда стороннее приложение может захватить мой файл. Поскольку у меня есть открытая ручка для временного и реального файлов, я искал способ выполнить функции удаления и переименования с помощью этих дескрипторов. Единственный вариант, который я могу найти, - это закрыть дескрипторы, а затем вызвать функции DeleteFile и MoveFile. Фактически я в настоящее время использую функцию API ReplaceFile для выполнения этих шагов, но у нее также есть имена файлов, которые были переданы и не будут работать, если я сначала не закрою свои дескрипторы.
Мне все еще нужно поддерживать XP и не могу начать использовать новые функции файлов транзакций. Есть ли способ заблокировать файлы и удалить/переименовать их?