2014-01-19 109 views
2

我正在使用C++從文件中讀取一些字符並將它們存儲在緩衝區中,但是,我目睹了使用ifstream的讀取函數的奇怪行爲。Ifstream讀取奇怪的行爲

首先,我使用此代碼段來獲取文件的長度:

input.seekg (0, input.end); 
int length = input.tellg(); 
input.seekg (0, input.beg); 

在那之後,我打電話閱讀()從文件中得到長度字節。

它工作得很好,除了一兩件事: 如果我使用input.gcount()看到了多少字節讀取,這個數字要少得多,我們在上面得到了(但該文件的長度顯示實際文件中的字節數)。

你們是否知道該文件的長度差什麼,通過使用所以tellg(),事後讀取的字節數發現,由gcount的()報道?

對不起,任何格式問題(我使用我的手機)。

非常感謝。

編輯:

這是代碼(或多或少)我使用:

ifstream input("test.txt"); 

input.seekg (0, input.end); 
int length = input.tellg(); 
input.seekg (0, input.beg); 

input.read(buffer,length); 

int extracted = input.gcount(); 
+0

'所以tellg()'返回而'gcount的外部序列中的位置()'返回從最近未格式化的輸入函數中讀取的字符數。因此,除非您從外部序列中讀取總字符數,否則'gcount()'總會返回比字符總數更小的值。 – 0x499602D2

+0

感謝您的評論...是的,我忘了提及,我*閱讀整個文件與read()...不應該由tellg()返回的數字與gcount()相同嗎? – user2455103

+0

然後請顯示代碼。 – 0x499602D2

回答