我正在编写一个程序来提取文件并将其添加到 xbox 360 的 STFS 文件中。STFS 结构是一个迷你文件系统,它有哈希表、文件表等。
提取文件很简单。我有文件的起始块和文件中的块数量,所以我只需要找到块偏移量,读取块长度,并将其作为文件发送出去。但是,当我需要替换或删除文件时会发生什么?我通常在 Windows 和计算机上读过,文件实际上并没有被删除,它们只是从文件表中删除,并在其他需要空间时被覆盖。那么,当我在写一个文件时,我如何找到一个足够大的未使用的块序列来容纳它呢?这些块的长度为 0x1000 字节,并用空字节填充剩余空间,因此一切都很好,但我想不出一种有效的方法来找到适合我要添加的文件的未使用的块范围。
我目前的计划是重写删除或添加文件的所有内容,这样我就没有大量未使用的空间,我无法弄清楚如何覆盖。是否有关于 NTFS 或 FAT32 等文件系统的很好的介绍,我可以阅读这些介绍,不需要几天时间就能理解,并且包含编写基本文件管理器所需的信息?
参考结构: http: //free60.org/STFS
编辑:在第二个,我会为表中的每个文件创建一个范围列表。即基于大小的起始偏移量和结束偏移量。在寻找插入文件的开放范围时,我会从 0 开始并检查每个范围的结束开始或结束是否在要插入的文件所需的范围内。如果开始或结束在范围内,我将继续移动到另一个文件的结束偏移的末尾。这比我最初的想法要好,但似乎仍然效率低下。我必须对文件表中的每个文件进行多次比较。