2014-02-21 39 views
0

我有以下代碼來管字節從文件在我的C++程序:連續地從文件中讀取管道字節

char *buffer = new char[SIZE]; 

    while (!std::cin.eof()) { 
     std::cin.read(buffer, SIZE); 
     for(int i=0; i<SIZE; i++){ 
     std::cout << buffer[i] << std::endl; 
     } 
    } 

然而,問題是我只輸出/讀取的第一SIZE字節管道。我怎樣才能讀取管道尺寸大於SIZE的管道中的所有字節?

+0

請閱讀istream文檔。你應該檢查返回值! – Basilevs

+0

http://www.cplusplus.com/reference/ios/ios/eof/ 似乎建議我做了什麼好嗎? :s – user997112

+1

不,你沒有。在讀取請求大小之前,讀取方法可能會達到EOF。 – Basilevs

回答

2

讀取操作後未檢查gcount()。 正確的方法:

while (!std::cin.eof()) { 
     std::cin.read(buffer, SIZE); 
     for(int i=0; i<cin.gcount(); i++){ 
     std::cout << buffer[i] << std::endl; 
     } 
    }