C 从硬盘永久删除文件

C 从硬盘永久删除文件,c,assembly,filesystems,hard-drive,delete-file,C,Assembly,Filesystems,Hard Drive,Delete File,我想知道如何写一个程序来永久删除我硬盘上的文件。我知道我的程序在删除系统到数据的链接方面至少需要具有与“rm”相同的功能,但我也对如何(完全)清空磁盘上的数据感兴趣 我非常确定C和assembly将提供这种低级功能,但我不确定如何开始尝试访问磁盘的某些部分,或跟踪磁盘上文件不同片段的位置 我知道,由于我缺乏文件系统方面的知识,这似乎是一个很大的项目,但我只是在努力学习。我知道我需要更多地了解硬盘以及我特别想使用的硬盘类型。但是,如果您能提供任何帮助/链接,我们将不胜感激。如果您打开文件,获取文件

我想知道如何写一个程序来永久删除我硬盘上的文件。我知道我的程序在删除系统到数据的链接方面至少需要具有与“rm”相同的功能,但我也对如何(完全)清空磁盘上的数据感兴趣

我非常确定C和assembly将提供这种低级功能,但我不确定如何开始尝试访问磁盘的某些部分,或跟踪磁盘上文件不同片段的位置


我知道,由于我缺乏文件系统方面的知识,这似乎是一个很大的项目,但我只是在努力学习。我知道我需要更多地了解硬盘以及我特别想使用的硬盘类型。但是,如果您能提供任何帮助/链接,我们将不胜感激。

如果您打开文件,获取文件大小,然后向要删除的文件写入n个空字节(其中n是字节数),则可以

之后,只需删除该文件。所有数据都将丢失,如果有人恢复文件节点,他所能看到的只是一堆零

也就是说:我相信这里的一些人会告诉你,你必须用零(或其他模式)擦除文件至少10到15次,才能真正删除所有内容的痕迹。永远删除该文件一次


这是一个都市传奇。不要相信他们。没有人,即使是CSI电视连续剧中的人也无法恢复已擦除过一次的文件。

如果打开文件,获取文件大小,然后向要删除的文件写入n个空字节(其中n是字节数),则可以

之后,只需删除该文件。所有数据都将丢失,如果有人恢复文件节点,他所能看到的只是一堆零

也就是说:我相信这里的一些人会告诉你,你必须用零(或其他模式)擦除文件至少10到15次,才能真正删除所有内容的痕迹。永远删除该文件一次


这是一个都市传奇。不要相信他们。没有人,即使是CSI电视连续剧中的人也无法恢复一次被删除的文件。

我想你想要的是使用这样的程序。唯一的问题是,对于许多文件系统来说,它不起作用


想出一个通用的解决方案可能是不可能的。

我想你想要的是使用一个像这样的程序。唯一的问题是,对于许多文件系统来说,它不起作用


想出一个通用的解决方案可能是不可能的。

我认为,如果不编写内核空间代码,您将无法直接做到这一点。操作系统负责对硬盘的低级访问。不确定这是否回答了您的问题,但要永久删除一个文件,我想您的意思是它将无法恢复,因此如果您用垃圾数据重写文件的每个字节,然后再删除它,应该可以这样做。@AtoMerZ:可能可以,但是,例如,在Windows Vista上,如果该驱动器有阴影存储,并且您的文件被卷入了系统还原点,则无法执行此操作。很明显,如果覆盖一个文件永久删除了旧内容,那么系统还原根本不起作用,但不明显的是,如果你想撕碎一个文件,那么你必须了解哪些文件有卷影副本。@Steve Jessop,没错,但我认为没有任何程序可以跟踪它,是吗?@AtoMerZ:一个可移植的程序什么都做不了,但在Windows上,至少可以识别出影子拷贝存在的时间。我不知道Windows API的细节,但是像“影子资源管理器”这样的东西可以管理。我不认为你不需要编写内核空间代码就可以直接做到这一点。操作系统负责对硬盘的低级访问。不确定这是否回答了您的问题,但要永久删除一个文件,我想您的意思是它将无法恢复,因此如果您用垃圾数据重写文件的每个字节,然后再删除它,应该可以这样做。@AtoMerZ:可能可以,但是,例如,在Windows Vista上,如果该驱动器有阴影存储,并且您的文件被卷入了系统还原点,则无法执行此操作。很明显,如果覆盖一个文件永久删除了旧内容,那么系统还原根本不起作用,但不明显的是,如果你想撕碎一个文件,那么你必须了解哪些文件有卷影副本。@Steve Jessop,没错,但我认为没有任何程序可以跟踪它,是吗?@AtoMerZ:一个可移植的程序什么都做不了,但在Windows上,至少可以识别出影子拷贝存在的时间。我不知道Windows API的细节,但“阴影资源管理器”之类的东西可以管理。CSI人员可以“增强”显示受害者眼睛的安全摄像头框架的1x1像素部分,将其放大到数百万像素的图像,从中可以看到杀手在角膜上的反射,因此,我非常确信,他们甚至可以从被扔到太阳底下的硬盘中检索数据。:)好吧,太棒了,这就是我想应该做的,但我不确定一个碎片文件是否会被保存回磁盘上完全相同的位置。谢谢。@Nils:不过,正如在对@yan回答的评论中所说的,事情并不是那么容易,因为有些文件系统和硬件并不总是就地覆盖,日志记录可能会留下痕迹,驱动器也不总是立即刷新更改。问题是,有些文件系统是在写时复制的,例如ZFS和BTRFS都这样做,用0覆盖文件可能只会用0填充其他以前未使用的块,而不是包含文件数据的块,显然这不是安全删除所需的。此答案仅适用于特定的文件系统。现代文件系统很可能不会将新数据放在sa上