2017-03-17 7 views
1

poco libary FTPclientsessionを使用してftp経由でバイナリファイルをダウンロードするC++アプリケーションを作成しました。私はftpサーバに1048576バイト(で構成されて1メガバイトのファイルをダウンロードしようとするとC++のバイナリファイルをistreamからostreamにコピーすると、必ずしも正しいとは限りません。

char c = 0; 
    istream is; 
    ostream os; 
std::streamsize iter = 0; 
is.get(c); 
while (istr && ostr) 
{ 
    ++iter; 
    os.put(c); 
    is.get(c); 
} 
return iter; 

:ダウンロードの進行状況をカウントするために、私は次のコードを使用してバイト単位でのostreamバイトへのIStreamからファイルをコピーしますstatコマンドでチェックした場合)、ほとんどの場合、この数字には達しませんが、1048573から1048575に1から3バイト少ない値が入ります。
ごくまれに正しいサイズまで測定します。また、is.fail()を調べて、測定値が正しくないケースがフェイルビットが設定されていることに気付きました。
これは、バイナリファイル、サーバーとの接続不良、またはコードの問題の問題ですか?

答えて

1

入力ストリームと出力ストリームの両方をバイナリモードで開くようにしてください。そうしないと、プラットフォームによってASCIIコード10(\n)が{13,10}(\r\n)に置き換えられます。

std::ofstream out("data.bin", std::ios::binary); 

バイナリストリームを使用するときは、また、フォーマットされた入力および出力操作(すなわちoperator >>operator <<)を使用しないでください。あなたはすでにget()put()を使用していますので、問題ないはずです。

関連する問題