2017-05-25 104 views
-6

1.如果fstream :: read()在讀取長度字段的足夠字符之前遇到eof,會發生什麼情況?fstream讀取eof時的行爲

2.如何判斷在這種情況下讀取了多少個字符?

感謝

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最近消息緩衝區是最有可能的空缺,而不是的sizeof(緩衝區)我如何確定我發送的尺寸。這些文件將採用二進制形式。

+2

是什麼文件上說的話題?爲什麼標記爲[tag:c]? –

+0

RTFM。如果你的文檔沒有涵蓋這個,你需要新的文檔。 –

+0

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

回答

1

documentation

如果輸入序列用完的字符提取(即,在達到結束文件)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

謝謝,什麼是「streamcount」?我可以做int n = in_file.gcount()嗎? –

+0

閱讀'gcount'的文檔。 'streamcount'是它返回的整數類型的typedef。 – Barmar

+0

您提供免費講義的次數越多,重複邀請「閱讀文檔」的可能性就越小。 –