如何强制删除文件

时间:2013-11-04 08:20:12

标签: c++

我想找到一种删除文件的方法。使用remove命令无法以简单的方式删除某些文件。像恶意软件或打开的文件。有没有可以强制删除的命令?

2 个答案:

答案 0 :(得分:1)

在Windows中,除非先关闭文件,否则无法删除当前打开的文件(包括操作系统作为执行的一部分保持打开的可执行文件,同样适用于当前加载的DLL和驱动程序)在没有严重欺骗和“欺骗操作系统”的情况下无法执行可执行文件的情况[例如关闭驱动程序中的文件,其中文件最初不是由该驱动程序打开的])。

大多数真实应用程序(例如安装程序)解决此问题的方法是将文件删除添加到在关机或启动时运行的内容,然后要求用户重新启动计算机。 [这也适用于使用新文件复制旧文件,这在安装软件时更为常见]。

在Unix / Linux环境中,只要您有足够的权限删除文件,就可以将其删除,但如果文件是打开的,则在关闭之前不会“真正删除”。在大多数情况下,这可能不会产生巨大的影响,但是例如一些长时间运行的程序正在生成一个巨大的日志文件,那么你实际上无法通过删除文件来释放磁盘空间 - 它只会在文件释放后释放关闭了。重新启动长时间运行的程序是一种解决方案,但如果您刚刚计算了大量的PI小数,并希望继续,则可能不是解决方案。

这两种机制都旨在防止操作系统突然出现突然意外,因为它打开的文件突然丢失了 - 特别是当操作系统可能使用该文件作为读取/写入页面的基础时内存分页系统(内存映射文件或可执行文件。

简而言之,没有简单的解决方案可以保证可以删除任意文件。

答案 1 :(得分:1)

首先,您应该确定给定文件的fd:Finding open file descriptors for a process linux ( C code )?

然后关闭它。它比强迫更好。