用CH376单独读文件或者创建文件写入数据,这两种操作都正常,但是如果把这两个操作连起来使用,先读U盘上的文件,再新建文件,这样U盘上新建的文件看不到,但是已经占用了U盘的空间,不知道是什么引起的,本来做得差不多了,现在生出这样的问题,真是郁闷。 我是用扇区方式读写文件,SPI通讯,程序也没加什么东西,基本上是把例程搬过来使用,哪位大侠给指点一下,谢谢
这个估计是你流程上面有问题。建议你将详细的流程发过来看下。U盘占用了空间说明FAT表被写了。文件不存在说明目录项没有被写。
哦,谢谢,我的程序是这样的
// 要读取的文件名 FileDataBuf[0]='1'; FileDataBuf[1]='2'; FileDataBuf[2]='3'; FileDataBuf[3]='4'; FileDataBuf[4]='.'; FileDataBuf[5]='T'; FileDataBuf[6]='X'; FileDataBuf[7]='T'; FileDataBuf[8]=0; // 文件名结束符
// 开始读取文件 s = CH376FileOpen(&FileDataBuf[0]); if( s == USB_INT_SUCCESS ) // 打开文件成功 { CH376SecLocate( 0 ); // 读取指针移到文件头 while(cSecNum { CH376SecRead(FileDataBuf, 1, 0); // buf,需读扇区数,读到扇区数 cSecNum++; } } s = CH376FileClose( FALSE ); // 关闭文件
// 开始写新文件 FileDataBuf[0]='8'; FileDataBuf[1]='8'; FileDataBuf[2]='8'; FileDataBuf[3]='8'; FileDataBuf[4]='.'; // 加文件扩展名 FileDataBuf[5]='T'; FileDataBuf[6]='X'; FileDataBuf[7]='T'; FileDataBuf[8]=0; // 当前文件名完整路径的结束符
s = CH376FileOpen(FileDataBuf); if( s == USB_INT_SUCCESS ) // 打开文件成功 { CH376FileErase(FileDataBuf); // 原来有同名文件,先删除再新建 } CH376FileCreate( NULL ); // 新建文件并打开,如文件存在则先删除后再新建,不必再提供 // 文件名,刚才已经提供给CH376FileOpen CH376SecLocate( 0 ); // 以扇区为单位移到文件头部
for(iTemp=0;iTemp<512;iTemp++) FileDataBuf[iTemp]=0x37; // 写入模拟数据
while(cSecNum{ CH376SecWrite( FileDataBuf, 1, NULL ); cSecNum++; }
// 将正确的当前文件长度写入CH376内存 CH376WriteVar32( VAR_FILE_SIZE, (UINT32)( SEC_NUM*DEF_SECTOR_SIZE + BYTE_REMAIN )); s = CH376SecWrite( FileDataBuf, 0, NULL ); s = CH376FileClose( TRUE );
s = CH376FileOpen(FileDataBuf); if( s == USB_INT_SUCCESS ) // 打开文件成功 { CH376FileErase(FileDataBuf); // 原来有同名文件,先删除再新建 } CH376FileCreate( NULL ); // 新建文件并打开,如文件存在则先删除后再新建,不必再提供 // 文件名,刚才已经提供给CH376FileOpen CH376SecLocate( 0 ); // 以扇区为单位移到文件头部
将前面打开文件部分去掉,直接这样创建: i=CH376FileCreate( FileDataBuf); // 看下i返回的值是多少?
i=CH376FileCreate( FileDataBuf); 返回的是14啊,创建成功的。
您打开文件的名或者创建的文件名路径有问题,在根目录下的需要开头以FileDataBuf=‘/’;
哦,确实是这个问题 但是我看编程指南里写的‘ABC’是表示在当前目录操作,我在根目录下操作文件应该也是在当前目录的啊,也有可能是我断章取义的错误理解了,在进入多级目录下的文件夹以后,在这个文件夹下读写操作才算是当前目录。 但是以前在根目录只要读和写不连续进行,就可以成功,所以也一直没有发现这个问题。 不管怎么说,问题解决了,多谢了
我也遇到这问题了 求帮助 QQ 994099840