You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino SD库目录命名疑问:含特殊字符的日期目录创建失败

SD.mkdir() 创建含多特殊字符目录失败的原因与解决办法

这问题我之前帮朋友排查过,其实核心是SD库(尤其是Arduino常用的SD库)背后遵循FAT文件系统的命名规则,不是单纯看特殊字符的数量——单个特殊字符可能刚好在允许范围内,但多个特定组合(比如你用的日期格式里的两个点)或者不符合FAT规范的命名会直接被拒绝。

关键规则:FAT32的目录命名限制

SD卡一般用FAT32格式,它对目录/文件名的硬限制包括:

  • 绝对不能包含这些字符:/ \ : * ? " < > |
  • 传统的8.3命名规则(SD库底层很多时候会遵循这个):最多8个主名字符 + 1个点 + 3个扩展名,超过这个结构或者多加点都会出问题
  • 不能以点开头或结尾(系统自带的./..除外,自定义目录不能这么用)

你用的11.03.24有两个点,完全不符合8.3的结构,所以SD.mkdir()直接判定为无效命名,返回false。而单个@是FAT允许的特殊字符,所以@/fasdaf/能创建成功,这就解释了你的测试结果。

你的测试验证刚好对应规则

你说测试编号1-5、7的目录都创建成功,只有带多个特殊字符的失败,移除后正常——这完全符合FAT规则:

  • 单个特殊字符(比如@)在允许列表里,所以能过
  • 多个点的命名违反了8.3结构,被SD库拦截

解决办法:调整日期目录的命名格式

如果要创建日期格式的目录,换个符合规则的写法就行:

  • 把点换成下划线:11_03_24,这完全符合FAT规范,SD.mkdir("11_03_24")肯定能成功
  • 用连字符替代:11-03-24,连字符也是FAT允许的合法字符
  • 要是非得保留点,只能用单个点的格式(比如1103.24),但这可能不符合你展示日期的需求

额外排查技巧

要是以后再遇到类似问题,可以打印SD库的错误信息来精准定位:

if (!SD.mkdir("11.03.24")) {
  Serial.print("Error code: ");
  Serial.println(SD.errorCode());
  Serial.print("Error message: ");
  Serial.println(SD.errorMessage());
}

这些信息能直接告诉你是命名无效还是其他问题(比如卡没插好、权限问题)。

内容的提问来源于stack exchange,提问作者Silviu Grumazescu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:33:17