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;//更新数据,交换内存指向新数据地址

}

...全文
774 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;//更新数据,交换内存指向新数据地址

}
和昨天发的应该没大区别,是在别的函数影响下写入不正常
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 ️ FTP文件服务器 Version Download Stars License Platform 一键开启FTP文件服务器,方便其他设备通过网络传输、管理文件,支持IPv4/IPv6、多用户、FTPS。 FTPS 配置 本软件默认使用 FTP 明文传输数据,如果数据比较敏感,或者网络环境不安全,则可以按以下步骤开启 FTPS 加密传输数据。 在 或 终端使用 (命令如下,需填入一些简单信息: 地区/名字/Email等)生成SSL证书文件(ftpServer.key和ftpServer.crt), 文件为其他名称。 直接将 和 放到程序所在目录, 开启服务时若存在这两个文件, 则启用加密传输 。 Windows文件管理器对 支持不佳, 推荐使用开源软件 客户端, 对 FTPS 支持比较好。 开启 后, 会影响传输性能, 最大传输速度会降到 左右。 若对网络安全没那么高要求, 不建议加密。 -- 多用户配置 一般单人使用时,只需在软件主页面设置用户名和密码即可。 如果需要开放给多人使用,可以按以下步骤建立多个用户,分配不同的读写权限和根目录。 在主程序所在目录新建文件 ,使用 或文本编辑器(需熟悉csv文件格式)编辑,一行一个配置: 第一列:用户名,限定英文大小写/数字。 第二列:密码,限定英文大小写/数字/符号。 第三列:权限,详细配置如下。 第四列:根目录路径。 样例 注: anonymous 是匿名用户,允许不设密码,其他用户必须设置密码。 详细权限配置: 使用 或 设置为 。 使用 或 设置为 。 使用 权限设置, 从以下权限挑选自行组合(注意大小写)。 参考链接:http...

70,040

社区成员

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

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