CSV如何在最后一行新建一行并填入数据呢

cz12312388 2018-07-17 04:20:33
我的思路是先获取原先数据,再获取填入的数据大小,重新分配一个大的内存,把原先旧数据和填入数据放到这个内存后释放原先内存,文件指针移动到头,清空这个文件的数据,再写入全部,但发现每次都写入旧数据,但新数据没写入,调用是这样WCsvFile_Newndex("1,2,3,4,5,6,7\r\n");
void WCsvFile_Newndex(char *buff)
{

char *CsvMemory;

u8 buffsize;
u32 CsvMemorySize;//申请内存的尺寸

buffsize = strlen(buff);//计算字符串 字符个数

CsvMemorySize = CsvDataSize + buffsize + 1 ;//计算申请内存的尺寸
CsvMemory = mymalloc(SRAMEX,CsvMemorySize);//申请一段总内存
if(CsvMemory == NULL) return;//申请不到数据
memcpy(CsvMemory,CsvDataSpace,CsvDataSize); //把前一段内存拷贝进去
memcpy(CsvMemory + CsvDataSize,buff,buffsize);//存入更改数据
f_lseek (CsvFile ,0);//指针移到文件开头
f_truncate (CsvFile);//截断(清除)当前文件指针后的文件数据 避免数据坑余
f_write(CsvFile,CsvMemory,CsvMemorySize,&Csv_bw); //存入后一段数据 (整段新数据)

myfree(SRAMEX,CsvDataSpace);//清空之前的申请旧数据的内存

CsvDataSize = CsvMemorySize;//更新数据尺寸

CsvDataSpace = CsvMemory;//更新数据,交换内存指向新数据地址

}

...全文
724 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sghcpt 2018-07-18
  • 打赏
  • 举报
回复
楼主,如果排查问题,可以先
1)先看看CsvFile文件打开是否成功,f_lseek,f_truncate函数操作是否成功?
2)在写入完数据后,可以尝试一下关闭CsvFile文件,看看是否写入的数据还在缓存中,没有实际保存到文件中?
3)判断一下,是否char *buff参数传进来的数据是否为空或者长度为0,如果是,写入的内容就是你之前的内容了?
4)又或者单独在WCsvFile_Newndex函数中删除之前存在的文件,重新重建文件,重新写入数据,看是否成功?
轻箬笠 2018-07-18
  • 打赏
  • 举报
回复
lz这段代码是FatFS的函数吧。
建议lz关注下f_lseek,f_truncate这两个函数的返回值
cz12312388 2018-07-18
  • 打赏
  • 举报
回复
感谢各位大佬回答,我已经写出来了。。
void WCsvFile_NewRowData(char *buff)
{
char *CsvMemory;

u8 buffsize;
u32 CsvMemorySize;//申请内存的尺寸

buffsize = strlen(buff);//计算字符串 字符个数

CsvMemorySize = CsvDataSize + buffsize;//计算申请内存的尺寸
CsvMemory = mymalloc(SRAMEX,CsvMemorySize);//申请一段总内存
if(CsvMemory == NULL) return;//申请不到数据
memset(CsvMemory,0,CsvMemorySize);
memcpy(CsvMemory,CsvDataSpace,CsvDataSize); //把前一段内存拷贝进去
memcpy(CsvMemory + CsvDataSize,buff,buffsize);//存入更改数据
f_lseek (CsvFile ,0);//指针移到文件开头
f_truncate (CsvFile);//截断(清除)当前文件指针后的文件数据 避免数据坑余
f_write(CsvFile,CsvMemory,CsvMemorySize,&Csv_bw); //存入后一段数据 (整段新数据)
myfree(SRAMEX,CsvDataSpace);//清空之前的申请旧数据的内存

CsvDataSize = CsvMemorySize;//更新数据尺寸

CsvDataSpace = CsvMemory;//更新数据,交换内存指向新数据地址

}
和昨天发的应该没大区别,是在别的函数影响下写入不正常

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧