据我所知,FAT32 使用 32 位数字来存储每个文件的文件大小(因此 FAT32 的文件大小限制为 ~4GiB)。在 FAT 中,每个文件都有一个根目录条目,这些条目用于存储文件大小的值。这一页显示 FAT32 的目录条目结构。此资源建议 FAT12 使用 25 位值来表示文件大小,而 FAT16 使用 31 位值。
第二个链接资源中的信息是否正确?如果不正确,FAT12 和 FAT16 的真正最大文件大小是多少?如果正确,那么为什么这些文件系统使用不规则的位数来存储文件大小?
编辑:为什么他们受体积大小限制而 FAT32 有固定大小?是因为它存储的文件大小大于任何支持的卷大小,还是 FAT12 和 FAT16 不使用文件大小作为目录条目中的字段?
答案1
FAT 上的文件大小存储在 32 位字段中。
在 FAT32 上,该字段被视为无符号,允许文件最大为 4294967294 字节(显然由于某种原因不允许 4294967295,可能在某处使用“-1”作为标志)。
在 FAT16 上,该字段的范围被限制为有符号的 32 位数。我猜想这是因为在 2GB 被认为是文件大小过大的时候编写的遗留代码。无论如何,超过 2GB 的 FAT16 文件系统都是一个奇怪的东西*。
AIUI 在 FAT12 上将文件大小限制为 32MB(不是 32KB!)不是因为文件大小有任何特定限制,而只是因为这是卷的最大大小,并且您不能拥有大于卷的文件。这同样适用于早期版本的 FAT16。
* DOS 4 到 Windows 95 使用的 FAT16 版本限制为每簇 64 个扇区,在典型的 512 字节扇区上,卷大小约为 2GiB。NT 将每簇的最大扇区数增加了一倍,允许 512 字节扇区卷大小约为 4GiB,并且 98 增加了对读取/写入的支持,但不支持创建或修复此类卷。如果底层设备有更大的扇区,理论上可以实现更大的卷,但我没有看到任何证据表明这在实践中确实发生了。