WinInet 将读取文件存储在字符/字符串 c++ 上

Posted

技术标签:

【中文标题】WinInet 将读取文件存储在字符/字符串 c++ 上【英文标题】:WinInet store read file on a char/string c++ 【发布时间】:2018-03-11 21:16:36 【问题描述】:
#include <WinInet.h>
#pragma comment(lib, "wininet")

void download(std::string domain, std::string url)

    HINTERNET hIntSession = InternetOpenA("MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hHttpSession = InternetConnectA(hIntSession, domain.c_str(), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
    HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", url.c_str(), 0, 0, 0, INTERNET_FLAG_RELOAD, 0);
    TCHAR* szHeaders = "";
    CHAR szReq[1024] = "";
    if (!HttpSendRequest(hHttpRequest, szHeaders, wcslen(L""), szReq, strlen(szReq)))
        MessageBoxA(NULL, "No se puede conectar al Servidor de Actualizaciones.", "Error Kundun", MB_OK | MB_ICONERROR);
    
    TCHAR szBuffer[1025];
    DWORD dwRead = 0;
    while (InternetReadFile(hHttpRequest, szBuffer, 1024, &dwRead) && dwRead)
    
        // What to do here?
    
    InternetCloseHandle(hHttpRequest);
    InternetCloseHandle(hHttpSession);
    InternetCloseHandle(hIntSession);


download("www.something.com", "File.txt");

所以我有这段代码可以从主机上的文本文件中读取内容。我设法通过谷歌搜索得到了它,它似乎工作得很好(如果我输入了一个不正确的域,它会显示带有错误的消息框)。问题是.. 我不知道如何将我刚刚读到的信息放入字符串或 char[]。

【问题讨论】:

我建议您先阅读所有那些“如何从 TCHAR 转换为 ...”的问题,然后再问另一个问题。 我在发帖之前已经看过很多帖子,我只是想要一些快速的帮助 > 我理解您所说的“只是需要一些快速帮助”,因为“如果需要的时间可以忽略不计,我自己也懒得做任何研究”。 【参考方案1】:

szBuffer 更改为char[],然后在循环中使用std::string::append()

#include <WinInet.h>
#pragma comment(lib, "wininet")

void download(const std::string & domain, const std::string &url)

    HINTERNET hIntSession = InternetOpenA("MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hHttpSession = InternetConnectA(hIntSession, domain.c_str(), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
    HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "GET", url.c_str(), 0, 0, 0, INTERNET_FLAG_RELOAD, 0);
    if (!HttpSendRequestA(hHttpRequest, NULL, 0, NULL, 0))
    
        MessageBoxA(NULL, "No se puede conectar al Servidor de Actualizaciones.", "Error Kundun", MB_OK | MB_ICONERROR);
    
    char szBuffer[1024];
    DWORD dwRead = 0;
    std::string data;
    while (InternetReadFile(hHttpRequest, szBuffer, 1024, &dwRead) && dwRead)
    
        data.append(szBuffer, dwRead);
    
    InternetCloseHandle(hHttpRequest);
    InternetCloseHandle(hHttpSession);
    InternetCloseHandle(hIntSession);
    // use data as needed...

【讨论】:

以上是关于WinInet 将读取文件存储在字符/字符串 c++ 上的主要内容,如果未能解决你的问题,请参考以下文章

是否有可能知道从文件中读取的长文本将在 C 中使用多少个字符?

读入字符并创建数组c ++

C语言 读取数字

通过 WinInet 下载数据

在C文件管理中,可以用1个字符串变量读取全名吗?

在 C 中处理从文件 I/O 中存储的字符串的问题