Допустим, у меня есть дескриптор файла в результате WinAPI CreateFile. Он не был открыт с помощью FILE_FLAG_DELETE_ON_CLOSE.
Есть ли способ удалить файл, имеющий только дескриптор, без имени файла?
Спасибо
Допустим, у меня есть дескриптор файла в результате WinAPI CreateFile. Он не был открыт с помощью FILE_FLAG_DELETE_ON_CLOSE.
Есть ли способ удалить файл, имеющий только дескриптор, без имени файла?
Спасибо
Если вы используете Windows Vista или более позднюю версию, SetFileInformationByHandle() позволит вам сделать это, установив информационный класс FileDispositionInfo
.
Конечным результатом этой операции будет то, что дескриптор теперь будет помечен для удаления при закрытии - когда последний дескриптор файла будет закрыт, файл будет удален.
Для более старых версий Windows NTDLL экспортирует NtSetInformationFile(), что позволяет делать то же самое.
Я не знаю, можете ли вы специально удалить файл, основываясь исключительно на дескрипторе, но вы всегда можете использовать дескриптор для получения имени файла, как описано в эту статью MSDN, а затем вызовите DeleteFile().
Vista+ предоставляет GetFinalPathNameByHandle(), который можно использовать с VOLUME_NAME_DOS для запроса пути «DOS», который затем можно передать DeleteFile().