假设由于 WinAPI CreateFile,我有一个文件句柄。它不是用 FILE_FLAG_DELETE_ON_CLOSE 打开的。
有没有办法在没有文件名的情况下删除只有句柄的文件?
谢谢
假设由于 WinAPI CreateFile,我有一个文件句柄。它不是用 FILE_FLAG_DELETE_ON_CLOSE 打开的。
有没有办法在没有文件名的情况下删除只有句柄的文件?
谢谢
如果您在 Windows Vista 或更高版本上运行,则 SetFileInformationByHandle()将允许您通过设置 information class 来执行此操作FileDispositionInfo
。
此操作的最终结果将是句柄现在将被标记为在关闭时删除 - 当文件的最后一个句柄关闭时,文件将被删除。
对于旧版本的 Windows,NTDLL 导出 NtSetInformationFile() 可以让你做同样的事情。
我不知道您是否可以仅根据句柄专门删除文件,但您始终可以使用句柄来检索文件名,如本 MSDN 文章中所述,然后调用 DeleteFile()。
Vista+ 提供GetFinalPathNameByHandle()可与 VOLUME_NAME_DOS 一起使用以查询“DOS”路径,然后您可以将其传递给DeleteFile()。