2013-08-13 22 views
5

私は画面に印刷しようとしているファイルを持っていますが、ファイル自体が13列から数百行であるときに返されるのはすべて "0x28fe88"です。C++どうやって.txtファイルをそのまま印刷しますか?

#include <iostream> 
#include <fstream> 
#include <istream> 
#include <ostream> 
#include <cstdlib> 
using namespace std; 

int main() 
{ 
    //Opens .txt file 
    ifstream infile1; 
    infile1.open("Taylor.txt"); 

    //Fail check 
    if(infile1.fail()) 
    { 
     cout << "File failed to open.\n"; 
     exit(1); 
    } 

    //Prints file to screen (not correctly) 
    cout << infile1; 

    //Closes file 
    infile1.close(); 
    return 0; 
} 

私は、そうでない場合は、完全なコードを投稿しないだろうが、私は非難をキャッチ保証しないように十分に短い願っています。

+0

ifstreamオブジェクトを印刷しているファイルの内容は印刷されません。 –

+2

'cout << infile1;' *はファイルの内容をstdoutに出力しません。オブジェクトのアドレスを出力しています。 – greatwolf

+0

元のコードはストリームオブジェクトをストリームに挿入します。これは、C++ 11より前のストリームクラス(技術的には、基本クラス 'basic_ios')が、ストリームが良好な状態にあるかどうかを示す' void * 'への変換を持っているからです。 、そうでない場合はNULL以外のポインタ)。元のコード表示はこの変換演算子の結果です。 C++ 11では、変換はもはや存在しません。これは 'boolean(明示的な演算子bool()'に置き換えられました。これは、非ブール値の文脈で不思議な変換を導入することなく同じ目的を果たします。 –

答えて

8

テキストファイルを印刷するには、cout << infile1.rdbuf();を使用してください。ファイルへのポインタが印刷されています。

編集: これがうまくいかなかった場合、ファイルに文字を読み込むのが最も近いでしょう。そこの文字列を使用してその周りに他の方法がありますが、このコードはうまく行います。

while(infile1.good()) 
    cout << (char)infile1.get(); 

それは、ファイルを読むために良いですしながら、文字コードを読み取り、瞬時に文字に変換します(UNICODEのためのいくつかの変更が必要になる場合があります)と、それを印刷します。

+0

これはポインタも出力します。今回は、infile1のバッファオブジェクトへのポインタです。このコードを試してください:cout.rdbuf(infile1.rdbuf()); – Michael

+0

'cout << infile1.rdbuf()'は誰でも知っているので、うまく動作します:) – FrogTheFrog

+0

あなたは正しいですが、テストしただけでうまく動作します。 – Michael

関連する問題