当前位置:C++技术网 > 资讯 > 文件是如何被删除的

文件是如何被删除的

更新时间:2015-06-24 13:03:27浏览次数:1+次

    Windows中删除文件,是否真的被删除了?可以很肯定的告诉你,是真的删除了。只不过,只是删除了而已。对用户而言,确实看不见了。但是对于磁盘来讲,依然没有真的删除。
    不同的文件系统内部执行的操作虽然不一样,但是原理是一样的。在FAT文件系统中,有一个目录项的结构,目录项就是目录下存放的文件或者子目录的一个对应条目,通过目录项可以找到文件和子目录。在目录项中,第一个字节是文件名的第一个字符,同时也是文件状态标志。删除文件时,会将这个字节设置为0xE5,也就是删除标记,这样就标记这个文件被删除了。不过,除此之外,还要在FAT文件分配表中将这个文件对应的存储空间释放掉,这样才真正执行完了删除文件的操作。如果不清楚FAT文件系统,可以参考 《快速格式化为何如此快速1-FAT文件系统》 和 《格式化做了什么1-FAT文件系统》。
    而在NTFS文件系统中,情况也类似。在MFT文件中,记录了所有的文件。在MFT的条目中,有一个字段专门作为文件的类型和状态标志,0x00表示文件已经删除; 0x01表示正常文件; 0x02表示目录已删除; 0x03表示正常的目录。删除文件时,只是将此处的标记设置为删除的标记而已。然后将文件对应的存储空间分配状态设置为未分配,这样一个文件就成功被删除了。要了解NTFS文件系统,可以参考《快速格式化为何如此快速2-NTFS文件系统》和《格式化做了什么2-NTFS文件系统》。
    从上描述可知,删除文件,不管是直接删除,还是删除到回收站,都会将这个标志设为已删除。一旦有新文件写入,就很可能覆盖这个被删除的文件。只不过删除到回收站的文件,系统会将文件记录在可能回收的文件链表中,并且保证这些文件的数据不被其他数据覆盖。但是一旦清空回收站,这种保证就不存在了。要彻底删除数据,在不格式化的情况下,如果不借助工具,可以多次写入数据,然后再删除,再写入,再删除,如此反复,且要将磁盘放满。这样就可以让无用的数据覆盖掉之前删除的重要数据。有用的数据不用动,只需将额外的空间使用垃圾数据填充和删除即可,不会影响里面已经存在的有用的文件,因此没必要移动所有的大文件再格式化。不过如果剩余的文件不大的话,可以先复制出去,再分区格式化,记住哦,不是快速格式化。快速格式化也是删不掉的,不清楚为什么,可以看看格式化和快速格式化的文章。