2011-02-02 11 views
3

UNIXでバイナリファイルからの読み取りを試みています。ファイルが存在し、そこにいくつかのデータ情報があります。私は、ファイル内の位置はまだゼロゼロですが、ファイルが空でないことを得る読み取り後fstream unixでの読み取りでの問題

fstrean fstrHandler; 

string strFileName; 

char Buf[30000]; 

fstrHandler.open(strFileName.c_str(), ios::in | ios::binary); 

fstrHandler.seekp(0, std::ios_base::beg); 

std::cout<< "Posi before read= "<< fstrHandler.tellg()<<endl; //*** Show after running 0 

fstrHandler.read (Buf, 400); 

std::cout<< "Posi after read= "<< fstrHandler.tellg()<<endl; //*** Show after running 0 

std::cout<< " gcount()= "<< fstrHandler.gcount()<< << endl; //*** Show after running 0 

if (fstrHandler.eof()) { 
     fstrHandler.clear(); 
} 

のコードは次のようになります。

+0

s/fstrean/fstream /。それ以外に、 'fstat :: open'が本当に成功したかどうかを確認する必要があります。例えば' assert(fstrHandler.good()) 'です。 – jweyrich

+0

私はそれを追加しませんでしたが、それは存在します –

+0

そして以下のコメントの後に、良い()の代わりにアサート(fstrHandler)。 –

答えて

2

seekpではなくseekgを試してください。ファイルには400バイトありますか? 400バイトを超えるファイルを入力すると、これは問題なく動作しているようです。少ない場合は、tellgは読み取り後に-1を報告しますが、gcount()は正しいです。

また、file - testを開いてファイルが実際に開いたかどうかを確認した後、

if (fstrHandler) 
{ 
// do stuff 
} 
else 
    std::cerr << "foo bar" << std::endl; 
+0

get(読み取り)の場合はG、put(書き込み)の場合はP。 –

+0

この条件は常に真と評価されます。しかし、 'good()'、 'fail()'、 'is_open()'という演算子があります。 – jweyrich

+1

@jweyrich:if(ストリーム)が(開かれた後に)常にtrue(http://codepad.org/ARjqICEB)であり、それはop!とは逆ですが、それ自体がfail()と同じです。良い()を使わないでください。 –

関連する問題