2016-10-28 9 views
0

Windowsでfstreamで開いたファイルの読み込みに問題があります。ifstreamで開かれたファイルの内容を読む

ファイルはsucessfully開かれ、それにはエラーがなく、しかしgetlineのとのサイクルには、コンテンツを取得していません。

このサンプルは完璧に実行し、Linuxのすべてのものには、ファイル全体の内容に

std::copy(std::istream_iterator<std::string>(file), std::istream_iterator<std::string>(), 
      std::ostream_iterator<std::string>(std::cerr, "\n")); 

を出力のほかには、完璧な、同じファイル、同じコードで、サイクル内のgetlineはすべて読み込みます。

編集のVisual Studio:私は、私はLinux上でのgetline

std::cout << file.rdbuf(); 

でサイクルする前に、コードのこの小さなラインを持っていることを言及するのを忘れてしまった

は、この行は、単にファイルの内容を印刷します、それだけではなく、印刷することができないウィンドウには、ファイルにアクセスできなくなりますstd::getline

+0

を行い、Windows上while(std::getline)

std::cout << file.rdbuf(); 

を呼んでいましたあなたはゼロになる? – NathanOliver

+0

@NathanOliver yep – tty6

+2

ファイルはテキストファイルですか?最初の文字は0x1Aですか? Windowsでは、ファイルの終わりを示す特殊文字またはバイト値があります。あなたのファイルに冒頭に*が含まれていて、ファイルをバイナリ*として開かないと、Windows OSはファイルの終わりの状態を返します。 –

答えて

3

getline()は、改行文字に達するか、または文字であるdelimになるまで入力ストリームから文字を抽出しますが、抽出するだけではなく、区切り文字で区切り文字を破棄します。あなたのファイルをチェックして、最初の行で起動したファイルの中で、newline characterというファイルがあることを確認してください。もしそうなら、それは唯一の改行文字を破棄するので、

while (std::getline(file, str)) { 
    strings.push_back(str); 
} 

は常にiterate only 1 time、何の文字を返さないでしょう。それはdeliminating characterに実行する場合、ファイルの最後に達した場合に

while (std::getline(file, str) || !file.eof) { 
    strings.push_back(str); 
} 

は今も、チェックします。

0

問題は、 `)(あなたは` strings.sizeを印刷する場合は、この行だから、whileループの後にはstdがアクセスできないファイル:: getlineの

+0

それを呼び出す理由は何でしたか? – Mikhail

関連する問題