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

您调用stream.rdbuf()了两次:一次用于标准输出cout,然后用于文件。

从您的解释中不清楚您是否在屏幕上看到任何输出(当您写信时cout)。

1)如果是,您需要将其写入文件:当您再次读取流时,它已用尽并且不包含任何内容。

只需删除

cout << stream.rdbuf(); 

线。

如果您还需要在屏幕上查看结果,std::stringstream请先捕获它,然后您可以将其内容输出到屏幕和文件(在第一次提取后使用seekp重置stringstream它)

2)如果您在屏幕上看不到结果,您很可能在连接到服务时遇到了问题

于 2012-07-10T19:09:53.903 回答