C++每次迭代向CSV文件追加行的实现 解决仅存单行数据问题
问题原因
- 打开输出流时默认使用
std::ios::out模式,该模式会直接清空文件原有内容,后续读取文件操作无法拿到历史数据,等于每次迭代都覆盖重写文件 - 原有读写拼接的逻辑完全冗余,还存在格式错误:拆分单元格后未回写逗号、换行符,即使逻辑跑通也会生成不符合CSV规范的内容
修复方案
直接用追加模式打开文件即可,不需要手动读取回写历史内容,修复后代码如下:
double columnA , columnB, columnC; // 每次迭代给三个变量赋值后执行以下写入逻辑 std::ofstream coordscsv; std::string filename = "Positions.csv"; // 指定追加模式打开,不会清空原有内容,写入默认追加到文件末尾 coordscsv.open(filename, std::ios::out | std::ios::app); // 可选:如果首次创建文件需要写入表头,可增加以下判断 if (coordscsv.tellp() == 0) { coordscsv << "columnA, columnB, columnC\n"; } // 写入当前时钟周期的三个数值 coordscsv << columnA << ", " << columnB << ", " << columnC << "\n"; coordscsv.close();
std::ios::app模式会自动将所有写入操作追加到文件末尾,不需要手动处理历史内容,性能和稳定性都远高于原有读写拼接的逻辑。
内容的提问来源于stack exchange,提问作者jerloi
相关产品推荐
相关产品推荐

