#include <iostream>#include <afxinet.h>#include <wininet.h> #PRagma comment( lib, "wininet.lib" )#define MAXBLOCKSIZE 1024using namespace std;bool DownloadFileAndSaveToLocal1(char* url, char* localPath){//存放的路径WCHAR newLocalPathName[256];memset(newLocalPathName, 0, sizeof(newLocalPathName));MultiByteToWideChar(CP_ACP, 0, localPath, strlen(localPath) + 1, newLocalPathName, sizeof(newLocalPathName) / sizeof(newLocalPathName[0]));//字符串转换WCHAR wszUrlName[256];WCHAR wszPathName[1024];memset(wszUrlName, 0, sizeof(wszUrlName));memset(wszPathName, 0, sizeof(wszPathName));MultiByteToWideChar(CP_ACP, 0, url, strlen(url) + 1, wszUrlName,sizeof(wszUrlName) / sizeof(wszUrlName[0]));MultiByteToWideChar(CP_ACP, 0, url, strlen(url) + 1, wszPathName,sizeof(wszPathName) / sizeof(wszPathName[0]));//首先获取资源文件的信息HINTERNET internetOpen = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);if (internetOpen == NULL)return FALSE;//打开连接HINTERNET internetOpenUrl = InternetOpenUrl(internetOpen, wszUrlName, NULL, 0, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_PRAGMA_NOCACHE, 0);if (internetOpenUrl == NULL){InternetCloseHandle(internetOpen);return FALSE;}//检查状态码DWord dwStatusCode;DWORD dwStatusSize = sizeof(dwStatusCode);HttpQueryInfo(internetOpenUrl, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatusCode, &dwStatusSize, NULL);if (dwStatusCode != 200){InternetCloseHandle(internetOpenUrl);InternetCloseHandle(internetOpen);return FALSE;}//获取接收数据大小DWORD m_iSize;DWORD dwLengthSize = sizeof(m_iSize);HttpQueryInfo(internetOpenUrl, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &m_iSize, &dwLengthSize, NULL);if (m_iSize < 0){InternetCloseHandle(internetOpenUrl);InternetCloseHandle(internetOpen);return FALSE;}//创建本地文件//HANDLE createFile = CreateFile(wszPathName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);//HANDLE createFile = CreateFile(newLocalPathName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);HANDLE createFile = CreateFile(newLocalPathName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);//如果本地文件是个无效的句柄 则就结束if (createFile == INVALID_HANDLE_VALUE)return FALSE;//执行读取数据char buffer[100000];memset(buffer, 0, sizeof(buffer));DWORD byteRead = 0;BOOL hwrite;DWORD written;int a = 0;if (internetOpenUrl != NULL){while (true){InternetReadFile(internetOpenUrl, buffer, sizeof(buffer), &byteRead);if (byteRead == 0)//读取完毕break;hwrite = WriteFile(createFile, buffer, byteRead, &written, NULL);if (hwrite == 0)//写入失败break;}}//下载完毕关闭连接InternetCloseHandle(internetOpenUrl);InternetCloseHandle(internetOpen);return TRUE;}void main(){if (DownloadFileAndSaveToLocal1("http://www.baidu.com/", "D://abc//index4.html")){cout << "成功了!" << endl;}}
新闻热点
疑难解答
图片精选