3

これは、任意のサイズのファイルから読み取り、毎回1016バイトのchar *パケットに書き込み、送信するためのループです(送信はまだ含まれていません)。

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::binaryファイルがモードで開かれておらず、 とmemset()の両方seekg()が結果の効果を隠すために使用されていることに賭けてみます。部分的な記録。

ところで:読んだは常にストリームの状態を確認したい:

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

また: sizeof(char) == 1.

于 2012-10-03T19:50:49.043 に答える