首先让我们确保你的输入文件是好的:
运行以下命令并让我们知道输出:
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <fstream>>
#include <iomanip>
#include <algorithm>
int main()
{
std::ifstream file("file.txt");
std::cout << std::hex;
std::copy(std::istreambuf_iterator<char>(file),
std::istreambuf_iterator<char>(),
std::ostream_iterator<int>(std::cout, " "));
}
编辑:
输出为 31 32 33 34 35 20 0A
尝试运行这段代码,看看输出是什么:
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <fstream>>
#include <iomanip>
#include <algorithm>
int main()
{
std::ofstream file("file.txt");
file << "12345 \n";
}
转储此文件的输出并将其与原始文件进行比较。
问题是不同的平台有不同的线路终止顺序。我只想验证“0x0A”是您平台的线路终止序列。请注意,当以文本模式读取文件时,行终止序列会转换为“\n”,而当您以文本模式将“\n”输出到文件时,它会转换为行终止序列。
编辑 2
所以我有文件:file.txt
> od -ta -tx1 file.txt
0000000 1 2 3 4 5 sp nl
31 32 33 34 35 20 0a
0000007
所以该文件包含 1 行以0x0A
使用这个程序:
#include <iostream>
#include <sstream>
#include <string>
#include <iterator>
#include <fstream>>
#include <iomanip>
#include <algorithm>
int main()
{
std::ifstream file("file.txt");
std::string line;
while(std::getline(file,line))
{
std::cout << "Line(" << line << ")\n";
}
}
我得到:
> g++ t.cpp
> ./a.out
Line(12345 )