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