我正在尝试在Xillinx Kintex 7卡上用C编码FAT系统。它配备了MicroBlaze,我已经设法创建了大部分所需的功能。
我面临的问题是关于文件夹的总容量,我在网上看到,在FAT32中,一个文件夹应该能够包含超过65000个文件但是我已经安装了系统我每个文件夹限制为509个文件。我认为这是因为我理解了FAT32的工作方式,但这是我迄今为止所做的:
这里的问题是文件夹的大小为1簇,这意味着它的容量为64扇区= 32KB,我只能在目录中创建512(减2)个文件!然后,我的问题是:是否可以更改群集数量的文件夹的大小?目前我只使用1个集群,我不明白如何更改它。它与驱动器的FAT有关吗?
提前感谢您的帮助!
注意:当我将其插入时,Windows会识别我的驱动器,我可以访问和读取每个文件(超出510限制的文件除外),我可以通过Windows资源管理器创建新文件。它显然来自我理解文件创建和文件夹创建的方式!
答案 0 :(得分:3)
FAT文件系统中的目录只是一种特殊类型的文件。因此,为此"文件"使用更多集群。就像你对任何其他文件一样。
根目录的群集号存储在FAT32头的偏移 0x2c 处,通常是群集 2 。如果这是根目录的唯一集群,则集群2的集群映射中的条目包含值0x0FFFFFFF
(集群末尾)。如果将群集映射中的群集3设置为群集2的下一个群集(将0x00000003
设置为群集2中的群集2的值,则可以将两个群集(例如群集2和3)用于根目录集群地图)。现在,集群3可以是最后一个集群(通过将其条目设置为0x0FFFFFFF
),也可以指向另一个集群,以使根目录的空间更大。
群集不需要是后续的,但它通常会在顺序读取时获得性能提升(这就是为什么对卷进行碎片整理会大大提高性能的原因)。
答案 1 :(得分:0)
如果所有文件都具有短文件名(8.3格式),则FAT文件系统目录中的最大文件数为65,536。短文件名存储在一个32字节的条目中。
这意味着目录(文件)的最大大小为65,536 * 32字节,即2,097,152字节。
8.3格式的短文件名由8个字符和可选的“。”组成。随后最多3个字符。字符集是有限的。包含小写字母的短文件名还存储在“长文件名”条目中。
如果文件名较长(长文件名),则文件名分布在多个32字节长的条目中。每个条目包含文件名的13个字符。如果文件名的长度不是13的倍数,则填充最后一个条目。
此外,每个长文件名条目都有一个短文件名条目。
2个32字节条目已经被“。”占用。和每个目录(根目录除外)中的“ ..”条目。
是否将1个32字节的条目用作结束标记?
因此,目录中文件的实际最大数量取决于文件名的长度。