我在设计中遇到了这样的问题,用ch376编辑U盘上的文件,文件编辑后长度变短。
编辑后重新写入U盘,只能覆盖原来重合的部分,源文件比新文件多出来的部分还在。
如果清空文件然后再写入就可避免,请问怎么清空一个文件内容?
我在设计中遇到了这样的问题,用ch376编辑U盘上的文件,文件编辑后长度变短。
编辑后重新写入U盘,只能覆盖原来重合的部分,源文件比新文件多出来的部分还在。
如果清空文件然后再写入就可避免,请问怎么清空一个文件内容?
我们没有清空文件的命令,你可以第二次写之后强制更新文件长度,可以参考例程EXAM8
EXAM8 例子里面是用数据块(扇区)写的方式来实现 强制更新文件长度,但是SD卡里同样的操作怎么办?SD卡不支持数据块(扇区)读写
如果是修改部分内容的话是可以的,如果是在中间删除在修改部分数据的话那么会比较麻烦,SD卡的修改通过字节方式来操作也是可以的。
我是把一个文件全部读入内存中,然后修改后再重新写入文件。
写入的时候怎么操作,具体语句怎么执行? 比如 我把内容为“1234567890”的文件“abc.TXT”从sd卡读入单片机的 buf[10]中, 然后删掉了“890”,这时候buf[] 内容变为“1234567000”
现在我想把内容“1234567”写入文件abc.txt里面?怎么操作?
“ s = CH376ByteWrite(buf, 7, NULL ); mStopIfError(s); ” 像这样操作后文件内容还是“1234567890” 而我需要的文件内容为“1234567”
在写之前需要用BYTELOCATE命令将文件指针指到你要写数据的位置,在调用写函数,写完之后关闭文件之前修改文件长度。如果你写了2个字节,则文件长度为2。写了10个就为10。
修改文件长度 是哪个函数?
修改文件长度 是哪个函数或者命令 我怎么没找到啊
你可以直接修改文件目录项FAT_DIR_INFO中的文件长度,参考下面程序: UINT8 SetFilelen( PUINT8 iFileName, UINT16 len) { UINT8 s; s = CH376FileOpen( iFileName ); /* 打开文件 */ if ( s == USB_INT_SUCCESS ) { /* 文件读写操作等... */ s = CH376DirInfoRead( ); /* 读取当前文件的目录信息FAT_DIR_INFO,将相关数据调到内存中 */ if ( s == USB_INT_SUCCESS ) { buf[0] = (UINT8)len; /* 文件长度*/ buf[1] = (UINT8)(len>>8); buf[2] = (UINT8)(len>>16); buf[3] = (UINT8)(len>>24); CH376WriteOfsBlock( buf, STRUCT_OFFSET( FAT_DIR_INFO, DIR_FileSize ), 4 ); /* 向内部缓冲区偏移地址DIR_FileSize写入4个字节 */ s = CH376DirInfoSave( ); /* 保存文件的目录信息 */ if ( s == USB_INT_SUCCESS ) { /* 成功修改并保存 */ /* 文件读写操作等... */ } } CH376FileClose( FALSE ); /* 关闭文件 */ } return( s ); }
谢谢 已解决问题