1

使用 FatFs 和他们的API,我正在尝试为驱动器的其余部分预分配文件系统空间以写入未知大小的文件。在文件写入过程结束时,任何未使用的空间都会被截断(f_truncate)。但是,当文件系统在删除某些文件后变得碎片化时,我在分配足够的空间时遇到了问题。为了克服这个问题,我只想分配足够的空间作为文件系统上最大的连续内存块。

在 FatFS API 中,有一些函数可以获取设备上剩余的可用空间量,即 f_getfree。还有一个 f_expand 函数,它以字节为单位接收大小,并返回给定大小的空闲连续内存块是否存在。

有没有一种有效的方法来计算可用的最大空闲连续内存块?我试图避免任何形式的蛮力“猜测和检查”方法。谢谢

4

1 回答 1

1

一种方法是创建您自己的 API 扩展,以计算所有扇区中的连续 FAT 条目。

在不修改 API 的情况下,您可以使用f_lseek(). 写入打开一个文件,用于f_lseek()扩展文件的大小直到“磁盘已满”(连续空间结束)。需要对新文件重复此操作,直到分配完所有磁盘。从中选择最大分配的文件,并删除其他文件。

于 2017-06-28T05:09:28.723 回答