【发布时间】:2025-12-25 08:00:06
【问题描述】:
我正在使用 C++ 分块读取文件。 该文件包含整数,每行两个。
首先,我用它来查找文件的长度:
input.seekg (0, input.end);
int length = input.tellg();
input.seekg (0, input.beg);
之后,我检查 length 是否大于 chunksize,如果是,我为该块分配内存...
char * buffer = new char [chunksize];
好的,阅读功能就到这里了……
while (true)
{
input.read (buffer,chunksize);
cout<<buffer;
if(input.eof()) break;
}
紧接着我delete [] buffer;
但是,我遇到了此代码的问题。比如输入文件是这样的:
2 5
4 5
6 8
7 5
4 2
1 2
程序不会输出预期的字符,而是类似:
2 5
4 5
6 8
7 5
4 2
1 2 2
1 2
你知道这些额外字符的原因吗?如果文件的大小小于 chunksize,我 input.read 使用它的长度并且它工作得很好。也许如果使用长度大于文件大小的 read 使其无法正常工作?
非常感谢
【问题讨论】:
-
这与
c有什么关系? -
抱歉……我盲目地按下了建议的 c 标签……
-
Don't iterate on
eof()。它会为您导致重复的最后输出。 -
谢谢你...好吧,即使我为小于块大小的文件取出循环和eof,垃圾数据仍然存在......
-
不应该在 eof 处停止读取吗???