C++实现文件间换行符复制问题求助
解决C++文件读写丢失换行符的问题
嘿,刚接触C++和文件操作遇到这种问题太正常啦!我来帮你分析下原因,再给你几个可行的解决方案~
问题根源:你的读取方式跳过了换行符
从你的代码片段看,你用了char fileChars存储读取的字符,大概率是用了>>运算符来读取(比如codedMessage >> fileChars)。但这个运算符有个特性:会自动跳过所有空白字符——包括空格、制表符,还有你头疼的换行符!所以你的程序根本没读到换行符,自然也就没法写入到输出文件里了。
两种有效解决方案
方案1:用get()和put()读写单个字符(推荐文本模式下用)
get()方法会读取文件里的每一个字符,包括空白和换行符,搭配put()写入就能完整保留换行:
#include <fstream> #include <iostream> using namespace std; int main() { char fileChars; ifstream codedMessage("input.txt"); ofstream decodedMessage("output.txt"); // 先检查文件是否成功打开 if (!codedMessage.is_open() || !decodedMessage.is_open()) { cout << "哎呀,打不开文件!请检查路径或权限~" << endl; return 1; } // 逐字符读取(包括换行),修改后写入 while (codedMessage.get(fileChars)) { // 这里放你的文本修改逻辑,比如: // if (fileChars == 'a') fileChars = 'b'; decodedMessage.put(fileChars); } // 别忘了关闭文件(虽然程序结束会自动关,但养成好习惯) codedMessage.close(); decodedMessage.close(); return 0; }
方案2:用二进制模式打开文件
如果想完全保留文件的原始字节(包括系统特定的换行符,比如Windows的\r\n),可以用二进制模式打开文件,这样读写时不会对换行符做转换:
// 打开时加上ios::binary标记 ifstream codedMessage("input.txt", ios::binary); ofstream decodedMessage("output.txt", ios::binary); // 后续同样用get()/put(),或者用read()/write()批量操作
小提醒
每次打开文件后一定要检查是否成功打开,不然遇到路径错误或者文件不存在的情况,程序会悄悄出错,很难排查~
内容的提问来源于stack exchange,提问作者Dogcam
相关产品推荐
相关产品推荐

