如何用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
相关产品推荐
相关产品推荐

