C++使用ofstream循环写入文本文件仅保留最后一条内容的问题
问题原因
你在循环内每次创建ofstream对象打开文件时,默认采用截断模式(ios::trunc),会清空文件原有内容后再写入。三次循环执行完毕,只有最后一次写入的plane被保留。同时原代码中的文件路径使用单反斜杠,会触发C++转义字符问题,导致路径识别错误。
解决方案
提供两种可行的修复方式:
方式一:单次打开文件,循环写入
将文件的打开/关闭操作移到循环外部,避免重复清空文件:
#include <fstream> #include <string> using namespace std; int main() { string vehicle[3] = { "car", "bike", "plane" }; // 路径使用双反斜杠转义,或改用正斜杠 ofstream out_file("C:\\Users\\Gadr\\Desktop\\test.txt"); if (out_file.is_open()) { for (int i = 0; i < 3; i++) { // 写入带<strong>标签的目标内容 out_file << "<strong>" << vehicle[i] << "</strong>" << endl; } out_file.close(); } return 0; }
方式二:循环内以追加模式打开文件
如果必须在循环内打开文件,使用ios::app追加模式,每次写入都会添加到文件末尾:
#include <fstream> #include <string> using namespace std; int main() { string vehicle[3] = { "car", "bike", "plane" }; for (int i = 0; i < 3; i++) { // 以追加模式打开文件,避免清空原有内容 ofstream out_file("C:\\Users\\Gadr\\Desktop\\test.txt", ios::app); if (out_file.is_open()) { out_file << "<strong>" << vehicle[i] << "</strong>" << endl; out_file.close(); } } return 0; }
额外注意点
- 文件路径中的反斜杠必须用双反斜杠
\\转义,或者直接使用正斜杠/,否则会因转义字符导致路径识别失败。 - 建议添加
is_open()判断,确保文件成功打开后再执行写入操作,避免因权限或路径错误导致无输出。
内容的提问来源于stack exchange,提问作者urbanc cladr
相关产品推荐
相关产品推荐

