0

stream.rdbuf()をファイルに書き込もうとしましたが、機能していないようです。空白のファイルであるため、どうすればよいかわかりません。

#include "stdafx.h"

#include <iostream>
#include <boost/asio.hpp>
#include <conio.h>
#include <stdio.h>
#include <fstream>

char buffer [9999999];

int main()
{
    boost::asio::ip::tcp::iostream stream;
    stream.expires_from_now(boost::posix_time::seconds(60));
    stream.connect("www.mail.ru","http");
    stream << "GET / HTTP/1.1\r\n";
    stream << "Host mail.ru\r\n";
    stream << "User-Agent   Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11\r\n";
    stream << "Accept   text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" ;
    stream << "Accept-Encoding  gzip,deflate,sdch\r\n";
    stream << "Accept-Language  en-US,en;q=0.8\r\n";
    stream <<"Accept-Charset    ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n";
    stream << "Cookie   \r\n\r\n";
    stream.flush();
    using namespace std ;
    cout << stream.rdbuf();
    ofstream f("output.txt" /*| ios::bin*/);
    f << stream.rdbuf();
    f.close();
    system("pause");
    return 0 ;
}
4

1 に答える 1

1

2回呼び出しています。1stream.rdbuf()回は標準出力cout用で、次にファイル用です。

画面に何かが出力されているかどうかは、説明からはわかりません(に書き込んだときcout)。

1)はいの場合、代わりにそれをファイルに書き込む必要があります。ストリームを再度読み取るまでに、ストリームは使い果たされ、何も含まれていません。

削除するだけです

cout << stream.rdbuf(); 

ライン。

画面にも結果を表示する必要がある場合は、std::stringstream最初に結果をキャプチャしてから、そのコンテンツを画面とファイルの両方に出力できます(最初の抽出後にリセットするには、で使用seekpします)。stringstream

2)画面に結果が表示されない場合は、サービスへの接続に問題がある可能性があります

于 2012-07-10T19:09:53.903 に答える