C++如何将结构体数据存入文本文件?仅保存最新输入如何解决
问题原因
ofstream默认以覆盖写入模式打开文件,你每次调用putToFile()方法时,都会先清空process.txt的原有内容再写入新数据,所以最终文件里只会保留最后一组输入的记录。
解决方案
这里提供两种可选的修复方式:
方案1:改动最小,直接修改文件打开模式
给open方法添加ios::app参数,指定以追加模式打开文件,不会清空原有内容,修改后的putToFile代码如下:
void putToFile() { ofstream input; input.open ("process.txt", ios::app); input << ID << "\t" << arrival << "\t" << wait << "\t" << burst << endl; input.close(); }
方案2:性能更优,统一写入所有数据
频繁打开关闭文件会产生不必要的IO开销,更推荐的做法是所有数据录入完成后,统一打开一次文件写入全部记录:
- 删除结构体中的
putToFile方法 - 在主函数的录入循环结束后,添加如下批量写入逻辑:
ofstream outFile("process.txt"); for (int i = 0; i < numProcess; i++) { outFile << process[i].ID << "\t" << process[i].arrival << "\t" << process[i].wait << "\t" << process[i].burst << endl; } outFile.close();
额外优化建议
你代码中ProcessRecords process[numProcess];的变长数组写法属于C语言特性,不符合C++标准,仅部分编译器做了兼容,更规范的写法是使用STL容器vector,修改为:
#include <vector> // 声明数组的位置替换为: vector<ProcessRecords> process(numProcess);
内容的提问来源于stack exchange,提问作者peanut butter
相关产品推荐
相关产品推荐

