You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++的fstream读取TXT文件并保留换行符' '为字符?

问题分析与解决

你的代码核心问题在于使用了格式化输入运算符>>,即便取消了skipws标记,它的设计逻辑还是倾向于读取“非空白数据项”,无法可靠捕获所有空白字符(包括换行符)。要实现逐字符无差别读取,应该使用无格式输入方法istream::get()。

修改后的代码

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <cstdlib> // 为exit()提供声明
using namespace std;

int main(){
    vector<char> text;
    char c;
    fstream inputFile;
    string filePath = "C:\\doc\\lib\\hello.txt";
    // 明确指定只读文本模式打开
    inputFile.open(filePath, ios::in);
    
    if(!inputFile) {
        exit(1);
    }

    // 使用get()逐字符读取,包括换行、空格
    while(inputFile.get(c)){
        text.push_back(c);
    }

    for(char ch : text){ // 用范围for循环更简洁
        cout << ch;
    }
    return 0;
}

关键说明

  • get()方法会读取流中的每一个字符,包括换行符\n、空格等空白字符,不会进行任何过滤或转换,完全符合你的需求。
  • 如果你的文件是Windows格式(换行符为\r\n),文本模式下读取时会自动将\r\n转换为\n。若需要保留原始的\r\n,需以二进制模式打开文件:
    inputFile.open(filePath, ios::in | ios::binary);
    
  • 补充了<cstdlib>头文件,避免exit(1)因缺少声明导致编译错误。

内容的提问来源于stack exchange,提问作者Capacitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 13:57:24