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()に渡すことができます。