当我使用最新版本的McAfee Antivirus时,我注意到Shred功能可以删除正在运行的文件,然后要求您重新启动计算机。有谁知道如何删除正在运行的文件而不关闭它们?
答案 0 :(得分:0)
可能取决于操作系统和文件系统类型。在Linux和Unix之类的,删除文件只是从文件夹中删除一个条目。如果没有文件夹条目指向该文件,则该文件实际上在上次关闭时被删除。因此,即使在另一个进程中打开文件,您也可以安全地删除该文件。
在Windows上,MSDN说:
如果应用程序尝试删除具有为正常I / O打开的其他句柄的文件或作为内存映射文件,则DeleteFile函数将失败
常用技巧包括:
MoveFileEx
WINAPI函数为此提供了条件。来自MSDN page(强调我的)BOOL WINAPI MoveFileEx( _In_ LPCTSTR lpExistingFileName, _In_opt_ LPCTSTR lpNewFileName, _In_ DWORD dwFlags );
...
lpNewFileName [in,optional]
本地计算机上文件或目录的新名称。
...
如果dwFlags指定MOVEFILE_DELAY_UNTIL_REBOOT且lpNewFileName为NULL,则MoveFileEx会在系统重新启动时注册要删除的lpExistingFileName文件。