Удаление файла только с дескриптором

Допустим, у меня есть дескриптор файла в результате WinAPI CreateFile. Он не был открыт с помощью FILE_FLAG_DELETE_ON_CLOSE.

Есть ли способ удалить файл, имеющий только дескриптор, без имени файла?

Спасибо


person Neil Weicher    schedule 22.05.2012    source источник
comment
Вероятно, вы можете использовать информацию из этого вопроса, чтобы получить имя файла для использования с DeleteFile   -  person user786653    schedule 22.05.2012


Ответы (3)


Если вы используете Windows Vista или более позднюю версию, SetFileInformationByHandle() позволит вам сделать это, установив информационный класс FileDispositionInfo.

Конечным результатом этой операции будет то, что дескриптор теперь будет помечен для удаления при закрытии - когда последний дескриптор файла будет закрыт, файл будет удален.

Для более старых версий Windows NTDLL экспортирует NtSetInformationFile(), что позволяет делать то же самое.

person Bukes    schedule 22.05.2012

Я не знаю, можете ли вы специально удалить файл, основываясь исключительно на дескрипторе, но вы всегда можете использовать дескриптор для получения имени файла, как описано в эту статью MSDN, а затем вызовите DeleteFile().

person Marty    schedule 22.05.2012

Vista+ предоставляет GetFinalPathNameByHandle(), который можно использовать с VOLUME_NAME_DOS для запроса пути «DOS», который затем можно передать DeleteFile().

person NuSkooler    schedule 23.05.2012