SD库存在的一些问题以及求创建文件名为变量时的方法-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 21471|回复: 20

SD库存在的一些问题以及求创建文件名为变量时的方法

[复制链接]
发表于 2014-5-5 14:30 | 显示全部楼层 |阅读模式
本帖最后由 xxfx1118 于 2014-5-5 14:48 编辑

最近几天使用SD卡模块及Arduino自带的SD库,发现的问题
《Arduino程序设计基础》书中没有提到的部分,在此整理一下

1、SD库创建文件只能创建文件名长度为不超过8+3的文件。
可以小于这个数,但不能长过它。例如:
SD.open("test.txt", FILE_WRITE);  
SD.open("test.a", FILE_WRITE);都可以,
但SD.open("123456789.txt", FILE_WRITE); 就创建失败。

读文件时同理。即便是卡上已经有了123456789.txt文件,用SD.open("123456789.txt")也打不开。

2、创建成的文件名只能是大写,无论你SD.open("test.txt", FILE_WRITE);  时用的是小写还是大小写混合。

3、创建文件夹时,也是不超过8位,自动变大写。
检测文件夹存在用SD.exists("TEST001/"), 就是比检测文件多用个斜杠;
向文件夹里建文件就用SD.open("TEST001/DATA001.txt", FILE_WRITE)。

4、SD.exists,SD.open(写文件) 两个命令在中途拔掉SD卡之后,依然提示成功。
我没找到让这两个命令失败的方法,只要在SD.begin()之后拔掉SD卡,程序会一直进行,检测、写文件都会提示成功,即便SD卡已经拔掉。
不知道大家是不是也遇到这样的情况。

5、再就是有一点不懂:如果要创建的文件名在变量里,则应怎样创建文件的方法。请教各位一下
举个例子 假如我接了硬件时钟1307,然后我想用今天的日期作为文件名,但是日期存在 tm.Day, tm.Month 变量里面,怎么把变量作为文件名呢?
SD.open(tm.Day , FILE_WRITE); 编译不通过。
有什么办法可以实现呢? 请教各位,谢谢






 楼主| 发表于 2014-5-5 19:48 | 显示全部楼层
自己顶一下
发表于 2014-5-6 23:58 | 显示全部楼层
前面几个没看哈,以你的认真程度肯定能解决啦,最近比较忙,就晚上看下论坛。

第5个问题,提问的时候最好带上编译器提示的报错,看看报错应该就能解决了。
我估计是你变量类型的问题,所以看了看SD库,果然
[mw_shl_code=cpp,true]File open(const char *filename, uint8_t mode = FILE_READ);[/mw_shl_code]
也就是说这里文件名必须是const char类型。
我不太清楚你的tm.DAY是什么类型,如果是string。
那么转换下就行了,例如:
[mw_shl_code=cpp,true]  String day = "20140506";
  const char* c_day = day.c_str();[/mw_shl_code]
然后用这个c_day做filename就行了
发表于 2014-5-7 14:42 | 显示全部楼层
2、3都遇到过。
发表于 2014-5-10 21:29 | 显示全部楼层
本帖最后由 liudr 于 2014-5-10 21:30 编辑

[mw_shl_code=c,true]char buffer[13];
sprint(buffer,"%4d%02d%02d.TXT",tm.Year, tm.Month, tm.Day); //Assume 20140511.TXT format
SD.open(buffer,FILE_WRITE);[/mw_shl_code]
 楼主| 发表于 2014-5-10 21:38 | 显示全部楼层
liudr 发表于 2014-5-10 21:29
[mw_shl_code=c,true]char buffer[13];
sprint(buffer,"%4d%02d%02d.TXT",tm.Year, tm.Month, tm.Day); //A ...

使用sprint函数直接用就行了是吧 还需要include什么头文件吗?谢谢
发表于 2014-5-11 08:40 | 显示全部楼层
如果用arduino IDE,那就不用include。
发表于 2014-9-21 14:09 | 显示全部楼层
liudr 发表于 2014-5-10 21:29
[mw_shl_code=c,true]char buffer[13];
sprint(buffer,"%4d%02d%02d.TXT",tm.Year, tm.Month, tm.Day); //A ...

用arduino IDE编译没有通过也
发表于 2014-9-21 14:40 来自手机 | 显示全部楼层
2个办法都不行
发表于 2014-9-21 14:41 来自手机 | 显示全部楼层
奈何col 发表于 2014-5-6 23:58
前面几个没看哈,以你的认真程度肯定能解决啦,最近比较忙,就晚上看下论坛。

第5个问题,提问的时候最好 ...

不是很懂这2句代码的意思,编译没有通过
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:57 , Processed in 0.284937 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表