C++服务器下载文件的两种方式
#include <afxinet.h>
#include "wininet.h"
#pragma comment( lib, "wininet.lib" ) string remoteIP = "http://www.test.com:8001";
string testIP = getDomain("IP");
string testPort = getDomain("PORT");
if (testIP != "NULL" && testPort != "NULL")
{
remoteIP = "http://" + testIP + ":"+ testPort;
}
logs.addLog("当前IP", remoteIP);
string finalURL = remoteIP + "/autoupdater.xml";
Divice_info dinfo;
finalURL += "?bit=";
finalURL += dinfo.getSystemByte().c_str();
finalURL += "&mem=";
finalURL += dinfo.getMem_info().c_str();
finalURL += "&disk=";
finalURL += dinfo.getDisk_info().c_str();
finalURL += "&os=";
finalURL += dinfo.getOSVersion_info().c_str();
finalURL += "&sys=";
finalURL += dinfo.getSystem_info().c_str();
finalURL += "&fingerprint=";
finalURL += m_fingerprint;
finalURL += "&version=";
TinyXmlConfig *txc = new TinyXmlConfig();
string version;
string configxml = m_workdirection + "\\config\\config.xml";
BOOL check = txc->getAttribute(configxml,"version", version);
if (FALSE == check)
{
version = "0.0.0.0";
}
finalURL += version;
finalURL += "&protocol=0";//twain logs.addLog(finalURL);
try {
//写入本地xml
string tempxml = m_workdirection + "\\config\\temp.xml";
/*
//从服务器获取xml文件
HINTERNET hOpen = InternetOpen("RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (hOpen == NULL)
{
logs.addLog("isUpdate() Internet Open fail...");
return FALSE;
}
HINTERNET hUrl = InternetOpenUrl(hOpen, finalURL.c_str(), NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
if (hUrl == NULL)
{
logs.addLog("isUpdate() Internet OpenUrl fail...");
InternetCloseHandle(hOpen);
return FALSE;
}
char buffer[10240];
DWORD readByte = 0;
DWORD writeByte = 0;
BOOL hread, hwrite;
buffer[readByte] = '\0'; HANDLE createfile;
createfile = CreateFile(tempxml.c_str(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (createfile == INVALID_HANDLE_VALUE)
{
logs.addLog("isUpdate() Create temp.xml failed!");
return FALSE;
}
int flag = 0;
while (true)
{
hread = InternetReadFile(hUrl, buffer, sizeof(buffer), &readByte);
if (hread == FALSE)
{
logs.addLog("isUpdate() hUrl read buffer fail...");
flag++;
break;
}
if (readByte == 0)
{
logs.addLog("isUpdate() temp.xml writeed successful...");
break;
}
hwrite = WriteFile(createfile, buffer, readByte, &writeByte, NULL);
if (hwrite == FALSE)
{
flag++;
logs.addLog("isUpdate() temp.xml write buffer fail...");
break;
}
}
CloseHandle(createfile);
InternetCloseHandle(hOpen);
InternetCloseHandle(hUrl);
*/
//if (flag>0)
//return FALSE;
bool flag = false;
HRESULT urldown = URLDownloadToFile(NULL,finalURL.c_str(), tempxml.c_str(),,NULL);
if (E_OUTOFMEMORY == urldown)
{
logs.addLog("server url xml is download fail");
}
else if (S_OK == urldown)
{
flag = true;
logs.addLog("server url xml is dowload successful");
}
else if (INET_E_DOWNLOAD_FAILURE == urldown)
{
logs.addLog("server url xml is not exist");
}
logs.addLog("server url xml返回值HREDULT",to_string(urldown));
if (flag)
{
string value;
BOOL hr = txc->getAttribute(tempxml, "NeedUpdate", value);
BOOL h1 = txc->getAttribute(tempxml, "url", m_urlZip);
BOOL h2 = txc->getAttribute(tempxml, "lastver", m_lastVersion);
BOOL h3 = txc->getAttribute(tempxml, "md5", m_md5);
BOOL h4 = txc->getAttribute(tempxml, "size", m_filesize);
delete txc;
if (FALSE == h1 || FALSE == h2 || FALSE == h3 || FALSE == h4)
{
logs.addLog("isUpdate() temp.xml url or lastver or md5 or get size get fail...");
return FALSE;
}
if (hr == TRUE)
{
logs.addLog("isUpdate() NeedUpdate : ", value);
if (_stricmp(value.c_str(), "true") == )
{
logs.addLog("isUpdate() NeedUpdate's value is True");
return TRUE;
}
else {
logs.addLog("isUpdate() NeedUpdate' value is Flase");
return FALSE;
}
}
else {
logs.addLog("isUpdate() temp.xml getAttribute fail..");
return FALSE;
}
}
}
catch (exception e)
{
logs.addLog("isUpdate() Exception");
return FALSE;
}
C++服务器下载文件的两种方式的更多相关文章
- java 下载文件的两种方式和java文件的上传
一:以网络的方式下载文件 try { // path是指欲下载的文件的路径. File file = new File(path); // 以流的形式下载文件. InputStream fis = n ...
- C#从服务器下载文件的四种方式
//方法一:TransmitFile实现下载 string fileName = "ss.docx"; //客户端预设的文件名,导出时可修改 string filePath = ...
- jsp:jsp包含文件的两种方式
第一种:include指令 include指令:当JSP转换成Servlet时引入指定文件(指令元素),这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件 ...
- Eclipse项目中引用第三方jar包时将项目打包成jar文件的两种方式
转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 “MANIFES ...
- 加载xib文件的两种方式
一.加载xib文件的两种方式 1.方法一(NewsCell是xib文件的名称) NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@&quo ...
- js 图片base64转file文件的两种方式
js 图片base64转file文件的两种方式 https://blog.csdn.net/yin13037173186/article/details/83302628 //将base64转换为bl ...
- 从后端接口下载文件的2种方式:get方式、post方式
从后端接口下载文件的2种方式 一.get方式 直接使用: location.href='http://www.xxx.com/getFile?params1=xxx¶ms2=xxxx' ...
- 【文件下载】Java下载文件的几种方式
[文件下载]Java下载文件的几种方式 摘自:https://www.cnblogs.com/sunny3096/p/8204291.html 1.以流的方式下载. public HttpServl ...
- Springboot 创建的maven获取resource资源下的文件的两种方式
Springboot 创建的maven项目 打包后获取resource下的资源文件的两种方式: 资源目录: resources/config/wordFileXml/wordFileRecord.xm ...
随机推荐
- App架构师实践指南六之性能优化三
App架构师实践指南六之性能优化三 2018年08月02日 13:57:57 nicolelili1 阅读数:190 内存性能优化1.内存机制和原理 1.1 内存管理内存时一个基础又高深的话题,从 ...
- java线程安全之并发Queue
关闭 原 java线程安全之并发Queue(十三) 2017年11月19日 23:40:23 小彬彬~ 阅读数:12092更多 所属专栏: 线程安全 版权声明:本文为博主原创文章,未经博主允许不 ...
- C++并发编程 条件变量 condition_variable,线程安全队列示例
1. 背景 c++11中提供了对线程与条件变量的更好支持,对于写多线程程序方便了很多. 再看c++并发编程,记一下学习笔记. 2. c++11 提供的相关api 3.1 wait wait用于无条件等 ...
- MAC常用软件推荐
SQL建模 http://dbwrench.com/download/install/mac_install.shtml 参考https://github.com/helantao/macOS/blo ...
- [Python设计模式] 第7章 找人帮忙追美眉——代理模式
github地址:https://github.com/cheesezh/python_design_patterns 题目1 Boy追求Girl,给Girl送鲜花,送巧克力,送洋娃娃. class ...
- DataGuard---->物理StandBy的角色切换之switchover
Switchover,无损切换,通常是用户手动触发或者有计划地让其自动触发,如硬件升级等. 步骤: 1.Primary数据库转换为StandBy角色 2.StandBy数据库(之一)转换为Primar ...
- plsql 操纵表数据的2种方式
1.情景展示 在plsql中,对表的操作(增.删.改.查),其实有2种方式,只是很多人都只会第一种方式罢了. 2.方式介绍 第1种方式:直接将值与sql写到一起 直接按F8运行即可. 第2种方式: ...
- Swift Assert 断言
前言 对每次运行都会出现的错误通常不会过于苦恼,可以使用断点调试或者 try catch 之类的方式判断并修复它.但是一些偶发(甚至是无数次运行才会出现一次)的错误单靠断点之类的方式是很难排除掉的,为 ...
- IDEA使用笔记(八)——自动生成 serialVersionUID 的设置
这个设置比较简单,也有一些博文已经写到了,为什么我还要写哪?(潜台词:因为我想凑一篇博文)我觉得学习,特别是编程学习是需要重复造轮子的,另外,就是加深自己的印象方便自己的查找.还有就是关键点,有些博客 ...
- 爬虫 需要什么样的 CPU,内存 和带宽
所有的需求都看这个图片吧,这个就是我爬取一个网站所用的服务器和服务器资源的消耗情况.