ifstream缓冲区限制/溢出? C ++(_ cnt?)

时间:2014-02-08 21:07:29

标签: c++ file size buffer ifstream

由于某些奇怪的原因,当我的文件的字节数太大时,会在停止读取正确数据的地方发生此错误。就好像缓冲区在某个时刻停止接收数据一样。

我尽可能地简化了我的代码以确定问题,但我已经意识到它不是我的代码,但可能是某个地方的缓冲区?


如果我的文件是14,034字节,我运行这个简单的代码:

ifstream inFile("text.txt"); //File is 14,034 bytes
char test;


while(inFile >> test) //This will stop looping at about the 768 - 769 loop
    cout << test;

如果我强制它继续使用for循环,结果是相同的:

ifstream inFile("text.txt"); //File is 14,034 bytes
char test;

for(int count = 0; count < 14034; ++count) //The loop will continue until the
    test = inFile.get();                   //end, but for whatever reason, 
    cout << test;                          //inFile stops at 768 - 769 again

现在:如果我使用相同的代码,但对于较小的文件(比如900字节),我似乎没有 那个问题。

完全相同的代码,只是不同的文件大小

ifstream inFile("text.txt"); //File is 900 bytes
char test;

while(inFile >> test) //This loop will continue to the 900th loop without 
    cout << test;     //problems.

完全相同的代码,只是不同的文件大小

ifstream inFile("text.txt"); //File is 900 bytes
char test;

for(int count = 0; count < 900; ++count) //The loop will continue until the
    test = inFile.get();                 //end (900) without problems.
    cout << test;

我在Google上搜索过我的问题,但一直无法找到解决方案。我遇到类似问题的唯一其他线程是这一个:

fopen - can't write more than 16K?

但即便如此,没有人真正明白他们在谈论什么 - 所以问题在技术上没有答案。

1 个答案:

答案 0 :(得分:2)

看起来您想要以二进制模式读取文件,您可以按照以下方式执行此操作:

std::ifstream file("test.txt", std::ios::binary);
char byte;
while(file.read(&byte, 1)){
    // Do something with byte
}