出于测试和模拟的目的,我想删除当前由我的进程打开的文件。
CreateFile docs表示可以以模式(FILE_SHARE_DELETE
)打开文件,该模式允许打开句柄指向的文件被另一个操作删除。 (我已经通过CreateFile(FILE_SHARE_DELETE)+ DeleteFile尝试并确认了这一点。)
我现在想知道的是,是否有可能以某种方式删除没有上述标志的任何人打开的文件?
据我所知,DeleteFile docs使用此功能是不可能的,如
如果应用程序尝试删除已打开的文件,则DeleteFile函数将失败 用于普通I / O或作为内存映射文件。
有没有其他方法可以删除已打开但未设置FILE_SHARE_DELETE标志的文件?
答案 0 :(得分:4)
没有办法做到这一点。
最接近这种方法的方法是使用目标文件名为NULL
的{{3}}和MOVEFILE_DELAY_UNTIL_REBOOT
参数中的dwFlags
来重新启动计划。< / p>
答案 1 :(得分:2)
我认为没有合法的方法来删除这样的文件。但是,如果您想要防弹,请记住,有些工具可以从外部关闭您的手柄,然后可以轻松删除文件(Process Explorer就是这样一个工具,但有others)。如果有人关闭了您打开的文件的句柄,则在尝试使用该句柄时会出错。
答案 2 :(得分:0)
您可以查看DeleteFileTransacted ,它允许在关闭时将文件标记为删除。但如果您想立即删除文件,它就不适合您。如果文件没有FILE_SHARE_DELETE
标志,则需要先将其关闭,但为此需要获取文件句柄然后将其关闭。但这需要使用代码注入技术。我不知道如何做得更容易。