我们的一个客户的备份硬盘出现了一种奇怪的问题:该硬盘的格式是 FAT32,昨晚我们的备份作业在子目录上抛出了错误,声称无法复制必须复制的文件。
我当然首先检查了磁盘大小,但空间还够用。给出的错误是 0x80070052,如果我将其输入搜索引擎,我会得到如下结果:http://www.quickonlinetips.com/archives/2007/09/how-to-fix-error-0x80070052-on-usb-flash-drives/
但是该分区的根目录中只有 8 个文件/目录。所以我决定自己测试一些东西。创建一个文件(例如名为“test.txt”)确实有效。但是创建一个带有备份作业失败的文件名的文件却不起作用,相反,我得到了与上述相同的错误。我进行了一些测试,发现我可以在该子目录中创建一个包含 10 个字符的文件,再多一个字符就会失败。
检测到之后,我在该子目录中创建了一个目录(名为“test”),并将一些文件从子目录移动到新目录中,完成后,我尝试创建一个包含 11 个字符的文件(之前不起作用)并且成功了。
现在,显然从观察来看,FAT32 单个目录内所有文件名可使用的字符数似乎存在某种硬性限制,但我找不到有关该硬性限制的任何信息,也找不到其他文件系统(尤其是 NTFS,我猜在这种情况下它是替代方案)是否有类似的限制。
如果有人能向我提供有关观察到的行为的信息,那就太好了!
编辑
一位同事告诉我将完全相同的文件夹放在另一个 FAT32 驱动器上,因为他曾经遇到过某个制造商的 USB 控制器问题。我尝试了两个来自不同制造商的 USB 棒,都是 FAT32 格式,都出现了与上述完全相同的行为。
为了让您了解所涉及的文件数量:大约有 10200 个文件,每个文件的文件名长度在 80 到 110 个字符之间,不包括文件路径(这似乎无关紧要),因此涉及大约一百万个字符。
答案1
如果所有文件都使用短文件名(8.3 格式),则 FAT 文件系统目录中的最大文件数为 65,536。短文件名存储在单个 32 字节条目中。
这意味着目录(文件)的最大大小为 65,536 * 32 字节,即 2,097,152 字节。
8.3 格式的短文件名由 8 个字符加上可选的“.”组成,后面最多 3 个字符。字符集有限。包含小写字母的短文件名另外存储在长文件名条目中。
如果文件名较长(长文件名),则它会分布在多个 32 字节长的条目中。每个条目包含文件名的 13 个字符。如果文件名的长度不是 13 的倍数,则会填充最后一个条目。
此外,每个长文件名条目都有一个短文件名条目。
2 每个目录(根目录除外)中的“.”和“..”条目已占用 32 字节条目。
1 32 字节条目作为结束标记?
因此目录中的实际最大文件数取决于文件名的长度。
答案2
最大文件名 + 目录路径总计为 255 个章程;所以这确实很重要。