0

如何使用 wxWidgets 下载 C++ 文件?

一直在谷歌搜索,一切都没有出现!帮助表示赞赏!

4

4 回答 4

6

为此使用wxHTTP类。

wxHTTP 示例代码:

#include <wx/sstream.h>
#include <wx/protocol/http.h>

wxHTTP get;
get.SetHeader(_T("Content-type"), _T("text/html; charset=utf-8"));
get.SetTimeout(10); // 10 seconds of timeout instead of 10 minutes ...

while (!get.Connect(_T("www.google.com")))
    wxSleep(5);

wxApp::IsMainLoopRunning();

wxInputStream *httpStream = get.GetInputStream(_T("/intl/en/about.html"));

if (get.GetError() == wxPROTO_NOERR)
{
    wxString res;
    wxStringOutputStream out_stream(&res);
    httpStream->Read(out_stream);

    wxMessageBox(res);
}
else
{
    wxMessageBox(_T("Unable to connect!"));
}

wxDELETE(httpStream);
get.Close();

如果您想要更灵活的解决方案,请考虑使用libcurl

于 2012-08-27T16:42:57.810 回答
1

取决于您想从哪里“下载”它,以及文件服务器如何允许下载文件。服务器可能使用 FTP、HTTP 或其他更模糊的东西。无法从您的问题中看出其中没有有用的信息。

一般来说,我不会使用 wxWidgets 来完成这项任务。wxWidgets 是一个 GUI 框架,带有一些附加功能,用于各种可能对您的情况有帮助或可能没有帮助的东西。

于 2012-08-27T16:44:30.223 回答
1

HTTP正如Andrejs建议的那样,从FTP使用wxFTP

wxFTP ftp;

// if you don't use these lines anonymous login will be used
ftp.SetUser("user");
ftp.SetPassword("password");

if ( !ftp.Connect("ftp.wxwindows.org") )
{
    wxLogError("Couldn't connect");
    return;
}

ftp.ChDir("/pub");
wxInputStream *in = ftp.GetInputStream("wxWidgets-4.2.0.tar.gz");
if ( !in )
{
    wxLogError("Coudln't get file");
}
else
{
    size_t size = in->GetSize();
    char *data = new char[size];
    if ( !in->Read(data, size) )
    {
        wxLogError("Read error");
    }
    else
    {
        // file data is in the buffer
        ...
    }

    delete [] data;
    delete in;
}

http://docs.wxwidgets.org/stable/wx_wxftp.html#wxftp

于 2012-08-27T16:45:18.453 回答
0

您没有定义“下载文件”对您意味着什么。

如果您想使用 HTTP 检索某些内容,您应该使用像libcurl这样的HTTP客户端库并发出适当的 HTTP请求。GET

于 2012-08-27T16:42:15.083 回答