今天早上我丢失了一堆文件,但由于它们所在的卷在内部和外部都进行了碎片整理,因此可以获得 100% 恢复所需的所有信息;我只需要在需要的地方填写 FAT。
我编写了一个程序来执行此操作,并在我转储到文件中的 FAT 副本上对其进行了测试,它运行良好,除了一些文件(526 个文件中的 17 个),FAT 链是一个单独的簇太长,并因此与下一个文件交叉链接。
幸运的是,我确切地知道问题出在哪里。我ceil
在我的 EOF 计算中使用了,因为即使是一个字节,也需要一个额外的集群:
//Cluster is the starting cluster of the file
//Size is the size (in bytes) of the file
//BPC is the number of bytes per cluster
//NumClust is the number of clusters in the file
//EOF is the last cluster of the file’s FAT chain
DWORD NumClust = ceil( (float)(Size / BPC) )
DWORD EOF = Cluster + NumClust;
该算法适用于所有文件,除了大小恰好是集群大小的倍数的文件,在这种情况下,它们最终成为一个集群太多了。
我想了一会儿,但不知如何做到这一点。看起来它应该很简单,但不知何故却出奇地棘手。
什么公式适用于任何大小的文件?