关于U盘读/写的一个有趣测试,在官网的例程中只提供了U盘创建新文件的示例,其功能是生成一个文本文件。
图1测试电路
图2 创建与写入结果
将U盘插入电脑后,在U盘中果真能见到新生成的文件NEWFILE1.TXT,其内容如图3所示。
图3 文件内容
有了写入功能固然可喜,但怎么读取呢?
在例程中却没了下文,参照其他的资料,自行补充了读取程序,其执行效果如图4所示。
图4 读取结果
可问题是我写入的明明是“Note:这个程序是以字节为单位进行U盘文件读写,简单演示功能。”,怎么读取得前100个字符却成了与写入内容没一点关系的100个“CCCCCCCCCC...”呢?问题出在何处呢?
后来才发现原来问题出现在下面的语句上:
for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) printf( "%C", mCmdParam.ByteRead.mByteBuffer );
上,应改为:
for ( i=0; i!=mCmdParam.ByteRead.mByteCount; i++ ) printf( "%c", mCmdParam.ByteRead.mByteBuffer );
读取的问题终于解决了!
另外一个我所关心的问题是如何生成一个BMP图像文件,便以存储二进制数的方式,生成了一个以BMP为后缀的文件。随后麻烦也就来了。
什么情况?
那就是它真的生成了该名称的文件,但问题是你既不能以WinHex工具软件来查看其内容,也不能自由地将其删除。如果这样实验下去,结果只有一个,那就是重新格式化U盘,否则就没法用了,但格式化的方法也未必好使。
那怎么办呢?只能以毒攻毒了,起初是在开发板上以文件删除的程序将其删除,但遗憾的是没能成功。那还能怎么办呢?
于是先以同样的文件名在开发板上生成一个文本文件,然后再删除该文件。这次果然成功了,这个顽疾算是从U盘给拔除了!
删除文件的效果如图6所示
图6 删除文件
在文件操作中,若指定的文件目录不存在,则会列出根目录下的所有文件,见图7所示。
图7 列出根目录文件
那在文件中是否能写入二进制的字节数据呢?当然是可以的,你看下面这段程序不是清楚地将回车换行符都写到文件里了吗。
printf( "ByteWrite\n" );
i = sprintf( (PCHAR)buf,"Note: \xd\xa这是一个以字节为单位进行U盘读写的简单示例。\xd\xa");
mCmdParam.ByteWrite.mByteCount = i;
mCmdParam.ByteWrite.mByteBuffer = buf;
s = CH579ByteWrite( );
mStopIfError( s );
printf("写入成功\n");
后面会继续探索BMP文件的生成方法及文件的读取,以便实现在该开发板上实现数码相框的功能。
本帖最后由 jinglixixi 于 2020-10-18 10:45 编辑