【发布时间】:2012-10-03 19:37:32
【问题描述】:
这是我从任何大小的文件中读取的循环,并写入一个 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 语句中添加了全部代码。
【问题讨论】:
-
你知道,你总是可以编译代码,运行它,看看它是否符合你的要求..
-
还有很多其他事情正在发生。我必须制作一个单独的程序。
-
你说创建一个C++程序好像很难。我几乎每次回答有关 C++ 的问题时都倾向于编写、编译和运行一个小程序(主要是因为我不经常使用 C++,也不想发布无法编译的代码示例)。
-
1) 使用
.eof()作为循环条件是almost always a bad idea。 2).eof()是要调用的函数,而不是要测试的标志。 -
@BrendanLong 在某些情况下建议不错,但在 C 和 C++ 中,由于实现定义和未定义的行为,它经常失败。
标签: c++ file-io binaryfiles