Первые буквы убедитесь, что ваш входной файл в порядке:
Запустите следующую команду и сообщите нам результат:
#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, " "));
}
Edit:
Выход был 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 )