SD卡读写文件流程
串口屏使用的卡是microSD卡,部分情形下使用SD卡来代称
提示
仅X2/X3/X5系列支持通过文件流控件来读写microSD卡文件,其他系列仅支持用microSD卡来升级固件 请参考: 通过SD卡下载工程到串口屏
注意
microSD卡也是有写入寿命的,具体取决于SD卡的质量。
注意
microSD卡不能超过32GB(例如:512M、1GB、2GB、4GB、8GB、16GB、32GB都是可用的)。
1.检查文件是否存在
注意
文件路径是字符串形式,需要被引号包裹起来,文件名建议使用英文和数字,使用其他可能会显示乱码(编码不一致导致的)
1 findfile "sd0/1.txt",sys0
2 if(sys0==1)
3 {
4 //文件存在
5 msg.bco=GREEN
6 msg.txt="文件存在"
7 }else
8 {
9 //文件不存在,新建文件
10 newfile "sd0/1.txt",4096
11 //再次检查文件是否存在
12 findfile "sd0/1.txt",sys0
13 if(sys0==1)
14 {
15 //文件创建成功
16 msg.bco=GREEN
17 msg.txt="文件创建成功"
18 }else
19 {
20 //判断为SD卡不存在
21 msg.bco=RED
22 msg.txt="找不到SD卡"
23 }
24 }
注意
也可以用文本控件来保存文件路径,但是请注意文本控件的txt_maxl属性需要足够大,建议设置为200,否则可能因为文件路径不完整而导致打开失败
1 filePath.txt="sd0/1.txt"
2 findfile filePath.txt,sys0
3 if(sys0==1)
4 {
5 //文件存在
6 msg.bco=GREEN
7 msg.txt="文件存在"
8 }else
9 {
10 //文件不存在,新建文件
11 newfile filePath.txt,4096
12 //再次检查文件是否存在
13 findfile filePath.txt,sys0
14 if(sys0==1)
15 {
16 //文件创建成功
17 msg.bco=GREEN
18 msg.txt="文件创建成功"
19 }else
20 {
21 //判断为SD卡不存在
22 msg.bco=RED
23 msg.txt="找不到SD卡"
24 }
25 }
2.打开文件
注意
操作文件需要使用文件流控件
1 filePath.txt="sd0/1.txt"
2 findfile filePath.txt,sys0
3 if(sys0==1)
4 {
5 //文件存在,打开文件
6 sys0=fs0.open(filePath.txt)
7 if(sys0==1)
8 {
9 //文件打开成功
10 msg.bco=GREEN
11 msg.txt="文件打开成功"
12 }
13 }else
14 {
15 //文件不存在,新建文件
16 newfile filePath.txt,4096
17 //再次检查文件是否存在
18 findfile filePath.txt,sys0
19 if(sys0==1)
20 {
21 //文件存在,打开文件
22 sys0=fs0.open(filePath.txt)
23 if(sys0==1)
24 {
25 //文件打开成功
26 msg.bco=GREEN
27 msg.txt="文件创建成功"
28 for(sys0=0;sys0<1024;sys0++)
29 {
30 //手动初始化整个文件,循环1024次,每次写入4字节,总共写入4096个字节,将0-4095初始化为0x00
31 fs0.write(0,0,4)
32 }
33 fs0.close() //有打开就要有关闭,最好写完后立刻关闭
34 }
35 }else
36 {
37 //判断为SD卡不存在
38 msg.bco=RED
39 msg.txt="找不到SD卡"
40 }
41 }
注意
也可以通过文件浏览器来获取文件路径,但是请注意文本控件的txt_maxl属性需要足够大,建议设置为200,否则可能因为文件路径不完整而导致各种问题
此时可以不判断文件是否存在,只需判断fbrowser0.txt非空即可
fbrowser0.txt在你选中了文件之后会自动改变
1 filePath.txt=fbrowser0.dir+fbrowser0.txt
2 if(fbrowser0.txt!="")
3 {
4 sys0=fs0.open(filePath.txt)
5 if(sys0==1)
6 {
7 //文件打开成功
8 msg.bco=GREEN
9 msg.txt="文件打开成功"
10 }
11 }
3.读、写、查找
保存数据时请注意以下几点
1.从哪里写入就从哪里读取(写入和读取前设置文件流的val属性,即读取的位置)。
2.写入时对应指针地址是什么属性,读取时就是什么属性,写入时是字符串属性,读取时就要读取到字符串属性中。写入时是数值属性,读取时就要读取到数值属性中。
4.关闭文件
有打开就必须有关闭
文件流控件-注意事项
新建文件时为什么要初始化文件
电脑上在创建文件时,会自动将整个文件都初始化为0x00,但是在串口屏上并不会
这是因为电脑的cpu是多线程的且电脑的性能远远高于串口屏,而串口屏是单线程
如果串口屏也自动初始化整个文件,当用户创建比较大的文件,如1GB的文件时,串口屏将会因为初始化文件的原因卡住一段时间,可能几分钟到十几分钟不等,取决于SD卡性能
没有初始化文件会怎么样
如果没有初始化文件,那么文件里面就会有之前删除过的文件数据,直接读取时就会有问题,例如读到未初始化的地方可能显示乱码。
如果我不想在屏幕里初始化怎么办呢
你可以提前在电脑模拟器上创建好一个文件,然后把文件拷贝到SD卡里面
SD卡读写文件流程-样例工程下载
演示工程下载链接: