使用FatF及其API,我试图为驱动器的其余部分预先分配文件系统空间来写入未知大小的文件。在文件写入过程结束时,将截断任何未使用的空间(f_truncate)。但是,在删除某些文件后文件系统碎片化时,我遇到了分配足够空间的问题。为了解决这个问题,我想只分配足够的空间作为文件系统中最大的连续内存块。
在FatFS API中,有一些函数可以获取设备上剩余的可用空间量,即f_getfree。还有f_expand函数,它接受以字节为单位的大小,并返回是否存在给定大小的空闲连续内存块。
是否有一种有效的方法来计算可用的最大可用连续内存块?我试图避免任何蛮力的“猜测和检查”方法。谢谢
答案 0 :(得分:1)
一种方法是创建自己的API扩展,以计算所有扇区中的连续FAT条目。
如果不修改API,您可以使用f_lseek()
。写一个文件,使用f_lseek()
扩展文件的大小,直到“磁盘已满”(连续空间结束)。这需要在新文件中重复,直到分配了所有磁盘。从中挑选最大分配文件,并删除其他文件。