首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过WinInet下载数据

通过WinInet下载数据
EN

Stack Overflow用户
提问于 2017-11-25 12:59:47
回答 1查看 3.4K关注 0票数 0

所以有一个代码,它可以下载大小不超过1024*100字节的数据。从https://rsdn.org/article/inet/inetapi.xml带来的代码。

据我所知,每次调用后的InternetReadFile都应该移动读字符计数,否则就没有意义了,因为它会返回相同的数据。我红了,那有一个函数,那就是移动读取开始指针。我要用它吗?

代码语言:javascript
复制
HINTERNET hInternetSession;
HINTERNET hURL;
char cBuffer[1024*100];            // I'm only going to access 1K of info.
BOOL bResult;
DWORD dwBytesRead;

// Make internet connection.
hInternetSession = InternetOpen(
    L"tes", // agent
    INTERNET_OPEN_TYPE_PRECONFIG,  // access
    NULL, NULL, 0);                // defaults

// Make connection to desired page.
hURL = InternetOpenUrl(
    hInternetSession,                       // session handle
    L"https://www.google.com.ua/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",  // URL to access
    NULL, 0, 0, 0);                         // defaults

// Read page into memory buffer.
while(bResult = InternetReadFile(
    hURL,              // handle to URL
    (LPSTR)cBuffer,    // pointer to buffer
    (DWORD)1024 * 100,       // size of buffer
    &dwBytesRead)==TRUE&&dwBytesRead>0) // pointer to var to hold return value

// Close down connections.
InternetCloseHandle(hURL);
InternetCloseHandle(hInternetSession);

DWORD dwTemp;
HANDLE hFile = CreateFile(L"googlelogo_color_272x92dp.png", GENERIC_WRITE, 0, NULL,
    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE == hFile) {
    return 0;
}
WriteFile(hFile, cBuffer, sizeof(cBuffer), &dwTemp, NULL);

问题:当创建char1024*1024时,我不能读取超过1024*1024字节,程序崩溃

EN

回答 1

Stack Overflow用户

发布于 2017-11-25 14:36:33

这是一个完整的程序。感谢@RbMm

代码语言:javascript
复制
#include <windows.h>
#include <wininet.h>

#pragma comment(lib,"wininet")


int main(int argc, char* argv[])
{
HINTERNET hInternetSession;
HINTERNET hURL;
            // I'm only going to access 1K of info.
BOOL bResult;
DWORD dwBytesRead=1;

// Make internet connection.
hInternetSession = InternetOpen(
    L"tes", // agent
    INTERNET_OPEN_TYPE_PRECONFIG,  // access
    NULL, NULL, 0);                // defaults

// Make connection to desired page.
hURL = InternetOpenUrl(
    hInternetSession,                       // session handle
    L"http://wallpapers-images.ru/1920x1080/nature/wallpapers/wallpapers-nature-1.jpg",  // URL to access
    NULL, 0, 0, 0);                         // defaults

// Read page into memory buffer.

char buf[1024];

DWORD dwTemp;
HANDLE hFile = CreateFile(L"пример.jpg", GENERIC_WRITE, 0, NULL,
    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if (INVALID_HANDLE_VALUE == hFile) {
    return 0;
}

for (;dwBytesRead>0;)
{
    InternetReadFile(hURL, buf, (DWORD)sizeof(buf), &dwBytesRead);
    WriteFile(hFile, buf, dwBytesRead, &dwTemp, NULL);
}

// Close down connections.
InternetCloseHandle(hURL);
InternetCloseHandle(hInternetSession);

CloseHandle(hFile);


return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47486240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档