微软未公开的秘密——FAT文件数量篇(原创版).docVIP

  • 16
  • 0
  • 约5.34千字
  • 约 9页
  • 2017-12-22 发布于河南
  • 举报

微软未公开的秘密——FAT文件数量篇(原创版).doc

微软未公开的秘密——FAT文件数量篇(原创版)

微软未公开的秘密——FAT文件数量篇(原创版) 微软未公开的秘密——FAT文件数量篇 结论:在FAT32下最大可以生成65536/32768个文件,具体与你用的是PC机器(比如Win XP),或者PDA(比如WINCE)和你使用的文件名的大小写有关。 新到公司碰到的第一个问题,客户报告:将SD Card格式化为FAT16时,在SD Card根目录下使用只能创建256个8.3格式文件(使用的是WIN CE5.0的系统)。将SD Card格式化为FAT32时,在SD Card根目录下只能创建32768个8.3格式文件。 测试发现,如果8.3格式的文件名中没有小写字母,包括扩展名,是可以创建512个文件的。(与路径名没有关系,即:经过测试,路径名是可以为小写的。)至于为什么有小写字母的时候,只能创建256个8.3格式文件,原因不详。 测试程序的开发环境:VS2005SP1,SDK为公司自定义的。将程序复制到SD卡后进行测试。 为了简化起见,不考虑中文文件名的情况,即:文件名只是由大小字母和数字组成。将SD卡格式化为FAT16,卡的卷标置空。(如果有卷标,会占用一个目录项。) 刚开始测试的时候,看到只能生成255个文件:SDMEM001.txt 到 SDMEM255.txt。(其中测试程序autorun.inf和fopen512.exe占用了1个位置)。使用 WinHex 查看 SD 卡的FDT(文件目录表),在正常的目录登记项32B前面,还有32B,很容易其发现规律:这32B的内容是目录登记项中文件名的UNICODE编码。后来,在 FAT32文件系统详解.pdf 一文的第20页中提到长文件:“5. 对于同一个子目录或文件,它的长文件名目录项存放在它的短文件名目录项之前,如果长文件名目录项占用多个 32字节,则按倒序存放于段文件名目录项之前。”,一下子明白了。WIN CE5将 fopen 所创建的 8.3格式文件 当成长文件了。长文件的格式在 File System Forensic Analysis.chm 一文的 Part III: File System Analysis——Chapter 10. FAT Data Structures——Long File Name Directory Entries中有详细讲解。 为了检验是个案,还是通例,换了一种机器测试过。可以生成从 SDMEM001.txt 到 SDMEM254.txt 共254个文件。(但是这种机器会自动生成一个文件夹,和测试程序的2个文件一起占用了2个位置。) 由于从电脑上是可以复制512个8.3格式文件到SD卡的根目录上的。当时想的是,是不是文件名太长了。因为WIN CE内部的编码是UNICODE的,也许 微软的人犯了一个常识性的错误(后来发现是文件名的大小写的问题),将文件名转化为 UNICODE码之后,还是按照 ANSI下比较长度的,于是8.3格式就超长了。猜测用 4.1格式,也许可以生成512个文件的。测试发现,可以生成从Z001.Q到Z510.Q 共510个文件。(其中测试程序占用了2个位置)。 对于扩展名,我习惯上都是用小写的。上周5的测试文件名:ZXCV.Q 我随手打的。今天准备写报告,从头开始做,测试文件先从8.3格式开始,然后是4.3格式,接着是4.1格式,不过,这次只能生成255个文件(其中测试程序占用了2个位置)。和以前的文件比对,发现不同之处:这次的扩展名用的是小写:SDME.t。修改为大写扩展名:SDME.T,问题解决。心想,既然文件名要用大写,那就干脆连 文件路径名 也用大写好了,最后就是抱着试试看的心态来尝试 8.3格式的“大写” 文件名(SDMEM000.TXT),都是可以生成510个文件的(其中测试程序占用了2个位置)。确认了 WIN CE5 支持在 FAT16 格式的 SD 卡的根目录创建512个8.3格式文件,不存在文件名长度的问题。刚开始以为 小写的文件路径名(SDMemory)会影响测试结果。后来发现没有影响。 偶然的原因,发现 测试程序在卡上建立的文件的数量少了一个。然后用 WinHex 查找 FDT(文件登记项),看见“autorun.inf”占用32B,但是“CFileExp.exe”占用64B,不知道原因。初步认为是因为碰到SD卡了,特殊情况。为了检验硬盘上面的情况。特地在我的电脑的最后一个分区划了一个1G的空间,格式化为FAT16。把“CFileExp.exe”复制到那里。用 WinHex 还是发现 “CFileExp.exe” 在 FDT里占用了64B。为了更好地验证这个情况。写了一个小程序,让它在硬盘生成一系列文件。最初是 ASDFG001.txt 到 ASDFG512.txt,然后是 asdfg001.txt

文档评论(0)

1亿VIP精品文档

相关文档