0

libcurl7.20.0とopenssl0.9.8l(ただし、ライブラリを7.29.0と1.0.1eに更新しました)、Windows 7を使用してファイルをダウンロードしようとしていますが、amd64で大きなファイルをダウンロードするためにすべてがコンパイルされています。私はcurlppをcurlのラッパーとして使用しています。問題は、2GBに達するとすぐに、ダウンロードがエラーで停止することFailed writing body (0 != 8999)です。リクエストを行うために使用するコードは次のとおりです。

boost::shared_ptr<curlpp::Easy> curl_request(boost::make_shared<curlpp::Easy>());
curl_request.setOpt(new curlpp::options::HttpVersion(CURL_HTTP_VERSION_1_0));
curl_request.setOpt(new curlpp::options::Timeout(3600));
curl_request.setOpt(new curlpp::options::SslVerifyHost(0));
curl_request.setOpt(new curlpp::options::SslVerifyPeer(0));
curl_request->setOpt(new curlpp::options::Url(request_uri));
if (cookies.size() == 0) {
    curl_request->setOpt(new curlpp::options::CookieList("dummy"));
} else {
    BOOST_FOREACH(const std::string &cookie, m_cookies) {
        curl_request->setOpt(new curlpp::options::CookieList(cookie));
    }
}
curl_request->setOpt(new curlpp::options::Post(true));
curl_request->setOpt(new curlpp::options::PostFields(query_string));
curl_request->setOpt(new curlpp::options::WriteStream(stream.get()));

try {
    curl_request->perform();
} catch (std::exception &ex) {
    error = true;
    std::cerr << "caught Unknown error: " << ex.what() << std::endl;
}

編集ストリームは文字列ストリームであり、MSVS2008を使用しています

4

1 に答える 1

1

これは、libcurl または OpenSSL の制限ではありません。これは、ファイル システム (FAT?) または WriteStream の実装 (または同様のもの) のいずれかであり、これが機能しません。

エラー メッセージは、ディスクへの書き込みが突然失敗したことを暗示しているようです。これはおそらく、書き込みがサポートされている最大サイズをオーバーフローしたときです。

于 2013-03-05T14:02:45.893 に答える