3

这是我从任何大小的文件中读取的循环,并且每次写入一个 1016 字节的 char* 数据包 1016 字节,然后发送它(发送尚未包括在内)。

seekg() 是必要的吗?或者读取是否已经将指针移动到下一个块的前面?

ifstream file (packet.message, ios::in|ios::binary|ios::ate);
if(file.is_open()) {
    size = file.tellg();
    file.seekg(0, ios::beg);
    for(int i = 0; !ios::eof; i++) {
        memset(packet.message,0,1016*sizeof(char));
        file.read(packet.message,1016*sizeof(char));
        file.seekg(i*1016*sizeof(char));
    }
}

我知道这不是写入文件的问题,因为您只需一直写到最后,直到文件大小合适。

编辑:在 if 语句中添加了全部代码。

4

2 回答 2

6

这不是必需的。从上次看到文件指针的位置继续读取,就像写入一样。

于 2012-10-03T19:38:40.040 回答
0

我敢打赌,文件没有在std::ios_base::binarymode 下打开,并且 thememset()和 theseekg()都被用来掩盖产生的效果:两者都不需要,尽管如果读取文件,您可能需要清除文件末尾的尾随字节部分记录。

顺便说一句:您总是想在阅读检查流的状态:

while (in.read(buffer, size)) {
    ...
}

还有:sizeof(char) == 1

于 2012-10-03T19:50:49.043 回答