最初のリートは、入力ファイルが適切であることを確認します。
次のコマンドを実行して、出力を知らせてください。
#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, " "));
}
編集:
出力は313233 34 35200Aでした
このコードを実行して、出力が何であるかを確認してください。
#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 )