1

PDFファイルをバイナリ形式のバイナリ形式で開いて読んでいます。ソケットを介してすべてのバイトをサーバーに送信する必要があります。この目的のためにwinsockを使用しています。以下は、私が問題を抱えているコードです:

int Div = (int)file_size / 1024;
int Mod = (int)file_size % 1024;
for (int i=0; i<Div; i++)
{
    file_block = new char[1024];
    myfile.seekg(i*1024);
    myfile.get(file_block,1024);
    send(theSocket,file_block,1024,0);
}
if (Mod != 0)
{
    file_block = new char[Mod];
    myfile.seekg(Div*1024);
    myfile.get(file_block,Mod);
    send(theSocket,file_block,Mod,0);
}

PDF ファイルを読み取ると、最初の 4 バイトを読み取った後にプログラムが停止します%PDF-1.5x0D x0Aファイルを Hex Editor で見ると、 の 16 進表現であることがわかりますCarriage Return & Line Feed

これが私のプログラムが動かなくなった理由ですか。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

たとえば、このリファレンスを見ると、次のようになっていることがわかりますget

3) と同じget(s, count, widen('\n'))。つまり、最大で count-1 文字を読み取り、'\n' が見つかるまで、s が指す文字列に格納します。

したがって、最初は改行までしか読み取れません。count - 1そして、あなたの場合は1023であり、期待どおりに1024ではなく、文字のみを読み取ります。

read代わりに使用する必要があります:

myfile.read(file_block, 1024);

おそらくエラーもチェックし、何もない場合にのみ送信する必要があります。

if (myfile.read(file_block, 1024))
    send(theSocket, file_block, myfile.gcount(), 0);
else
{
    // Error, handle it somehow
}
于 2013-05-26T15:19:51.530 に答える