2017-05-25 5 views
-6

1.長さフィールドの十分な文字を読み込む前にfstream :: read()がeofにヒットするとどうなりますか?fstream eofを打ったときの動作を読み取る

2.この場合、いくつの文字が読み込まれているかはどのように知ることができますか?代わりのsizeofの

while(in_file.read(buffer, buffer_length)){ 
//what happens if eof not at the end of size buffer_length 
      temp = sendto(sender_socket, buffer, sizeof(buffer), 0, NULL, 0); 
      byte_count += temp; 
      msg_count ++; 
} 

私はここでやろうとしているファイルの固定長で読み出され、バッファは、最も可能性の高い未充填され、最後のメッセージをただしsender_socketに送信され、(バッファ)

感謝私が送るサイズをどうやって決めるのですか?ファイルはバイナリ形式です。 documentationから

+2

は、ドキュメントが話題に何と言っていますか?なぜこのタグが付けられているのですか? –

+0

RTFM。あなたのドキュメントでこれをカバーしていない場合は、新しいドキュメントが必要です。 –

+0

http://en.cppreference.com/w/cpp/io/basic_istream/read –

答えて

1

n文字が正常に読み込まれた前に、入力シーケンスは、アレイがsで指さ、(すなわち、ファイルの終わりに達した)を抽出する文字が不足した場合その時点までに読み込まれたすべての文字が含まれ、eofbitfailbitの両方のフラグがストリームに設定されます。
...
この関数で正常に読み取られ格納された文字数には、メンバーgcountを呼び出すことでアクセスできます。

だからあなたが行うことができます。

while(in_file.read(buffer, buffer_length)){ 
    temp = sendto(sender_socket, buffer, sizeof(buffer), 0, NULL, 0); 
    byte_count += temp; 
    msg_count ++; 
} 
streamcount n = in_file.gcount(); 
if (n > 0) { // read a partial buffer 
    temp = sendto(sender_socket, buffer, n, 0, NULL, 0); 
    byte_count += temp; 
    msg_count++; 
} 
+0

「ストリームカウント」とは何ですか? int n = in_file.gcount()を実行できますか? –

+0

'gcount'のドキュメントを読んでください。 'streamcount'は、それが返す整数型の型定義です。 – Barmar

+0

あなたが無料で配布資料を提供するほど、「文書を読む」ことを繰り返し勧める可能性は低くなります。 –

関連する問題