2014-01-19 141 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

回答