海峰 发表于 2024-10-31 12:04:49

MF35_ 发表于 2024-10-31 11:37
也是没办法的事情,FAT系统设计虽然落后,但足够简单,实现起来比较容易,也不怎么占资源,同时性能 ...

顺便问一下,是不是也有FAT8?

MF35_ 发表于 2024-10-31 12:14:36

本帖最后由 MF35_ 于 2024-10-31 12:22 编辑

海峰 发表于 2024-10-31 12:04
顺便问一下,是不是也有FAT8?

并没有,FAT最低的是FAT12,FAT12和FAT16统称为FAT,它们是同一个标准,FAT文件系统也叫MSDOS文件系统,它就是微软为DOS设计的。理论上,你可以自己把它降级为FAT8,但一是只能管理256个簇(实际上不到,有几个保留簇号),根本管理不了几个文件,FAT12也仅仅用于软盘而已;二是如果其他设备不支持,你自己搞了有什么用呢

FAT32就是FAT32,是一个新标准,和FAT标准区别就比较大了,但大致相似,并且这个标准前向兼容,但所有FAT文件系统有点搞笑的是,你无法从文件系统本身的信息去判断它是FAT12、FAT16还是FAT32,微软白皮书推荐的方式是,根据磁盘容量区间来合理的使用FAT的不同格式,然后通过磁盘的总簇数来猜测是哪种FAT,是不是很扯淡;P ,也就是说,按照微软的建议,假如一个磁盘按照容量应该格式化为FAT16,但你强制把它格式化成FAT32(某些软件可以做到),而它的总簇数又正好在FAT16的区间,那可能导致你的电脑识别不了,因为微软认为它应该是一个FAT16,然后读取错误;P

chipset009 发表于 2024-10-31 12:16:16

那点差距折算成百分比没多大,关键是NTFS需要整理碎片,这玩意比较费事。

MF35_ 发表于 2024-10-31 12:17:48

washu 发表于 2024-10-31 11:43
exFAT 本身就是巨硬设计给蜥蜴屋用的文件系统

蜥蜴屋是个啥玩意儿:o

washu 发表于 2024-10-31 12:21:54

MF35_ 发表于 2024-10-31 12:17
蜥蜴屋是个啥玩意儿

Windows CE 5.0,不过好像有人说是蜥蜴鹿时代发布的

MF35_ 发表于 2024-10-31 12:24:10

washu 发表于 2024-10-31 12:21
Windows CE 5.0,不过好像有人说是蜥蜴鹿时代发布的


具体不清楚,我第一次见到这个文件系统,是用在相机存储卡

locky_z 发表于 2024-10-31 13:02:41

本帖最后由 locky_z 于 2024-10-31 13:05 编辑

看软盘FAT表的格式,假如存在FAT8就很浪费了。

云卷云舒 发表于 2024-10-31 14:06:32

蜥蜴屋,哈哈,这诨名!将西医与巫术结合,治病效果应该不错——西医巫。
windows ce一般多用于掌上电脑或智能手机,火腿肠手机是典型系列。
导航上也有使用windows ce的

云卷云舒 发表于 2024-10-31 14:11:09

没用过5“FDD,3”的FDD我都是格式化成FAT16的,1.38MB(1.44MB)可以扩容至1.72MB
exFAT是FAT32的扩展,解决了在FAT32文件系统中读写4GB以上文件的问题。

JuncoJet 发表于 2024-10-31 14:31:21

exFat 支持超过4G单个文件,并且没有NTFS那样的日志
特别容易坏,需要经常 chkdsk

lwjw999 发表于 2024-11-29 09:50:38

格式化的时候,你用相同的分配单元大小再试试!

NewChina牛中国 发表于 2024-12-2 12:38:09

以前专门拷一个补丁,为了让人家的叉屁认我的exfat油盆

iffi123 发表于 2024-12-2 14:44:57

本帖最后由 iffi123 于 2024-12-2 14:57 编辑

MF35_ 发表于 2024-10-31 12:14
并没有,FAT最低的是FAT12,FAT12和FAT16统称为FAT,它们是同一个标准,FAT文件系统也叫MSDOS文件系统 ...

”你无法从文件系统本身的信息去判断它是FAT12、FAT16还是FAT32“
这个不存在的,在分区的DBR里,多个信息就能区分FAT32和其它2种, fat12/fat16如何区别不大了解
offset
0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
0x28~0x29:2字节,标记,此域FAT32 特有。
0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。

毕竟我上次做播放器的时候,是自己手写的FAT32支持,在查阅资料后,一步步从目录结构(父目录/子目录)里寻找文件项,在FAT表里获取簇号,以及簇号对应的数据读取,以及文件的任意位置的数据读取,不同簇大小读取(从2KB到最大64KB, 忽略没有实用性的512B和1KB),都做了测试和验证,最后成功完成播放,FAT32简单易懂,用在单片机上确实不错,4G文件限制大多数也不是问题(测试过3.99G单文件播放无问题)

MF35_ 发表于 2024-12-3 21:03:19

本帖最后由 MF35_ 于 2024-12-3 21:51 编辑

iffi123 发表于 2024-12-2 14:44
”你无法从文件系统本身的信息去判断它是FAT12、FAT16还是FAT32“
这个不存在的,在分区的DBR里,多个 ...


这个是微软的FAT白皮书所说,首先有两点你理解错了

“0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。”
这两个字节,只是说FAT32必须为0,但没说FAT12/FAT16必须不为0,实际上FAT16是可以为0的,当它为0时,使用0x20开始的4字节BPB_TotSec32作为总扇区数,BPB_TotSec32并不在FAT32特有的BPB头中,FAT16可以使用BPB_TotSec32

“0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。”
这8个字节是推荐选项,微软原文的描述是:Always set to the string ”FAT32”. Please see the note for this field in the FAT12/FAT16 section earlier. This field has nothing to do with FAT type determination. 所以千万别用这个识别FAT种类,我明确知道有些系统格式化FAT时这里甚至什么都没有

另外,白皮书关于如何识别FAT种类有专门一章,里面明确说了除了总簇数,没有其他方法可以用来识别FAT种类,你前面说的那几个“must be 0”的字段,按照BPB的描述确实如此,但微软却专门给出另一种“略显复杂”的判断类型的方法,而且微软自己也是使用这种方法。

之所以如此,是因为当一个磁盘接入时,你无法获得一个标志性的数据来识别这个文件系统是不是FAT(而很多其他文件系统有标识),在这种情况下,你就无法确定那些字段填写的是不是FAT的参数,也就无法判断它是不是FAT系统,跟别说判断是哪种FAT,所以微软才给出以簇数来判断的方法,先假设它是FAT,然后通过这些参数计算总簇数,如果其中一种对的上,它就是对应的FAT,如果对不上,它就不是FAT,在这个过程,要依次按照FAT12/FAT16、FAT32的特征去匹配,所以我才说,FAT系统是一个相当麻烦的东西,一点儿也不严谨





iffi123 发表于 2024-12-3 22:25:29

本帖最后由 iffi123 于 2024-12-3 22:45 编辑

MF35_ 发表于 2024-12-3 21:03
这个是微软的FAT白皮书所说,首先有两点你理解错了

“0x13~0x14:2字节,FAT32必须等于0,FAT12/F ...

除了我上面列出的几处,DBR还有几处是区分FAT2/16和FAT32的,其实FAT12/16没人用,不用考虑,就像我对待tf卡,不考虑簇大小为512或1K, 现在的大容量卡不会格式成这么小的簇,而那种几百M容量的卡都不好找到,不需要考虑和支持

其实你不用抓住不规范的软件或者系统不放,我用diskgenius格式化的FAT32
比如下面字段,换算成10进制就是offset是82-89
0x52~0x59:8字节,文件系统格式的ASCII码,FAT32
单片机读取后的信息,确实按照规范设置,并没有忽略,所以推荐用diskgenius


页: 1 [2] 3
查看完整版本: 不同文件系统占据空间差异巨大