用fstream读写TXT文件需选对流类型并检查打开状态:ifstream逐行读取用getline(),ofstream写入可覆盖或追加,fstream同时读写需指定模式组合并注意seekg/seekp定位。
用 fstream 读写 TXT 文件,核心是选对流类型(ifstream、ofstream 或 fstream),正确打开文件,并检查是否成功。
推荐用 std::ifstream,配合 std::getline() 逐行读取最稳妥,避免空格截断;若用 >> 运算符则按空白符分隔(空格、制表、换行都会切开)。
示例:读取并打印每行内容
#include#include #include int main() { std::ifstream fin("data.txt"); if (!fin.is_open()) { std::cerr << "无法打开 data.txt\n"; return 1; } std::string line; while (std::getline(fin, line)) { std::cout << line << '\n'; } fin.close(); return 0; }
用 std::ofstrea。默认是覆盖写入(
mstd::ios::out);要追加,显式加上 std::ios::app 模式。
ofstream("file.txt")
ofstream("file.txt", std::ios::app)
!fout 或 fout.fail() 判断示例:向文件追加两行
#include#include int main() { std::ofstream fout("log.txt", std::ios::app); if (!fout) { std::cerr << "无法打开 log.txt\n"; return 1; } fout << "操作完成\n"; fout << "时间:2024-06-15\n"; fout.close(); return 0; }
用 std::fstream,但必须指定模式组合,例如:
std::fstream file("data.txt", std::ios::in | std::ios::out); —— 可读可写,文件必须存在std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::trunc); —— 读写+清空原内容std::fstream file("data.txt", std::ios::in | std::ios::out | std::ios::ate); —— 打开后定位到末尾注意:读写切换时需调用 seekg()(读位置)或 seekp()(写位置),否则行为未定义。
is_open() 或隐式转换为 bool_setmode(_fileno(stdin), _O_U16TEXT)(Windows 特有)或改用绝对路径测试.close() 也行,对象析构时会自动关闭,但显式关闭更清晰可控fin >> x 遇到非数字字符会停止,且留下剩余字符在缓冲区,后续 getline() 可能读到空行——可用 fin.ignore() 清理