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.写入时对应指针地址是什么属性,读取时就是什么属性,写入时是字符串属性,读取时就要读取到字符串属性中。写入时是数值属性,读取时就要读取到数值属性中。

read-从文件流读取数据

write-将数据写入文件流

find-按关键字查询并定位文件流指针

4.关闭文件

有打开就必须有关闭

close-关闭文件流

文件流控件-注意事项

新建文件时为什么要初始化文件

电脑上在创建文件时,会自动将整个文件都初始化为0x00,但是在串口屏上并不会

这是因为电脑的cpu是多线程的且电脑的性能远远高于串口屏,而串口屏是单线程

如果串口屏也自动初始化整个文件,当用户创建比较大的文件,如1GB的文件时,串口屏将会因为初始化文件的原因卡住一段时间,可能几分钟到十几分钟不等,取决于SD卡性能

没有初始化文件会怎么样

如果没有初始化文件,那么文件里面就会有之前删除过的文件数据,直接读取时就会有问题,例如读到未初始化的地方可能显示乱码。

如果我不想在屏幕里初始化怎么办呢

你可以提前在电脑模拟器上创建好一个文件,然后把文件拷贝到SD卡里面

SD卡读写文件流程-样例工程下载

演示工程下载链接:

《文件浏览器v2.0》演示工程下载

《使用文件流控件记录波形数据》演示工程下载

《文件流控件简单使用1》演示工程下载

《文件流控件简单使用2》演示工程下载

《文件流控件简单使用3》演示工程下载