假设我有一个 Python 程序,它打开一个文件并用零覆盖它,我在 NTFS 格式的 Windows 7 计算机上运行它。如果在 HDD(而不是 SSD)上执行此操作,文件会在磁盘上被覆盖,还是会将更改写入新扇区并更新文件链接?
答案1
简短回答:
文件会在磁盘上被覆盖吗?也许。
对于安全的删除文件可能是不可接受的。
更长的答案:
我认为这取决于打开文件时使用的标志以及文件是否压缩或加密。许多应用程序似乎只是在覆盖,但最终却将新内容写入磁盘上的另一个位置,而原始内容仍留在磁盘上。
要检查文件的前后位置,您可以使用 DiskView 工具http://technet.microsoft.com/en-au/sysinternals/bb896650.aspx
您是否在寻找一种将所有可用空间都写为零的工具?有一个 MS 工具可用于此目的,但它的工作方式是创建填充相同内容的新文件(默认情况下不是零,但无论如何压缩效果都很好),然后将它们全部删除。请参阅http://support.microsoft.com/kb/833138了解更多信息。它也被称为“Virtual Disk Precompactor.ISO”,它是使用 Virtual PC 或 XP 模式安装的。
但是,当磁盘已满时,这确实会造成短暂的时间,并且如果系统当时正在使用中,它会将新文件喷洒到整个磁盘上。我在想,如果您可以利用碎片整理 API 将零填充文件移动到磁盘上的所有可用空间位置,那么对正在运行的系统的影响就会较小。但我还没有看到任何可以做到这一点的工具。
如果你正在寻找一个可以安全删除文件的工具,微软提供了一个http://technet.microsoft.com/en-au/sysinternals/bb897443.aspx称为 sdelete,它实际上使用碎片整理 API 执行了一些棘手的操作,以实际擦除稀疏和压缩文件,而仅仅向这些类型的文件写入零不会由于 ntfs 的工作方式而将零写入与旧内容相同的位置。sdelete 程序的链接对此进行了描述。请注意,sdelete 不需要安装,因为它是自包含的。