MFC 下载文件

mfc ftp文件下载 ////////////////////////////////////////////////////////////////////////////////// //功能://从ftp上下载文件 //参数说明: //远程文件路径url:例"ftp://ftp.microsoft.com/developr/adc/index.txt"; //本地文件路径localpath:例"E:\\Debu 阅读详情
// EMsgBoxUpdate.cpp : 定义应用程序的类行为。
//

#include "stdafx.h"
#include "EMsgBoxUpdate.h"
#include "EMsgBoxUpdateDlg.h"
#include <afxinet.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CEMsgBoxUpdateApp

BEGIN_MESSAGE_MAP(CEMsgBoxUpdateApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CEMsgBoxUpdateApp 构造

CEMsgBoxUpdateApp::CEMsgBoxUpdateApp()
{
	// 支持重新启动管理器
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CEMsgBoxUpdateApp 对象

CEMsgBoxUpdateApp theApp;


// CEMsgBoxUpdateApp 初始化

BOOL CEMsgBoxUpdateApp::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();

	
	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;


	try
	{

		// 关闭小助手进程
		HANDLE hProcessHandle;
		ULONG nProcessID;
		HWND theWindow;
		theWindow=::FindWindowW(NULL,_T("******"));
		::GetWindowThreadProcessId(theWindow,&nProcessID);
		hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE, nProcessID );
		::TerminateProcess( hProcessHandle, 4 );

		//下载更新文件
		CString  basePath=m_Recorder.GetIsSetIP()?
		_T("http://")+m_Recorder.GetServerIp()+_T(":")+m_Recorder.GetServerPort():
		m_Recorder.GetHttpHead()+m_Recorder.GetServerHttpAddr();

		CString m_theUrl = basePath+_T("/LoadFile/update/update.zip");
		CString localFilename=m_Recorder.GetAppPath()+_T("/update.dat");
		//删除上次更新的文件
		DeleteFile(localFilename);
		CInternetSession session;


		CInternetFile* remoteFile =(CInternetFile*)session.OpenURL(m_theUrl,1,INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD   );
		if(!remoteFile )
		{
			remoteFile->Close();
			delete remoteFile;
			session.Close();
			MessageBox(NULL,_T("下载更新文件失败! "),_T("提示"),MB_ICONERROR);

			return FALSE;
		}
		DWORD statusCode;
		((CHttpFile *)remoteFile)->QueryInfoStatusCode(statusCode);

		if (statusCode==404)
		{
			MessageBox(NULL,_T("下载更新文件失败! "),_T("提示"),MB_ICONERROR);
			return FALSE;
		} 

		CFile localFile;//MZ?
		
		if(localFile.Open(localFilename,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary,NULL))
		{
			int readlen = -1;
			char buf[1024];
			readlen = remoteFile->Read(buf,1024);
			if(readlen == 0||buf[0]!='M'||buf[1]!='Z')//是否为可执行文件
			{
				MessageBox(NULL,_T("下载更新文件失败! "),_T("提示"),MB_ICONERROR);
				remoteFile->Close();
				delete remoteFile;
				session.Close();
				return FALSE;
			}
			localFile.Write(buf,readlen);
			ZeroMemory(buf,1024);
			while(1)
			{
				readlen = remoteFile->Read(buf,1024);
				if(readlen == 0)
				{
					break;
				}
				localFile.Write(buf,readlen);
				ZeroMemory(buf,1024);
			}
			localFile.Close();
		}
		else
		{    
			MessageBox(NULL,_T("下载更新文件失败! "),_T("提示"),MB_ICONERROR);
			remoteFile->Close();
			delete remoteFile;
			session.Close();
			return FALSE;
		}

		remoteFile->Close();
		session.Close();
		delete remoteFile;
		CString curPath=m_Recorder.GetAppPath();
		WIN32_FIND_DATA fileinfo;
		HANDLE hFile= FindFirstFile(localFilename,&fileinfo);
		if(hFile==INVALID_HANDLE_VALUE)
		{
				MessageBox(NULL,_T("下载更新文件失败! "),_T("提示"),MB_ICONERROR);
				return FALSE;
		}



		BOOL ret=FALSE;
		ret=MoveFileEx(curPath+_T("/E时代邮件小助手.exe"),curPath+_T("/update.bak"),
			MOVEFILE_REPLACE_EXISTING);
		if(!ret)
		{
			MessageBox(NULL,_T("备份原文件失败! "),_T("提示"),MB_ICONERROR);
			return FALSE;
		}
		ret=MoveFileEx(localFilename,curPath+_T("/*******.exe"),
			MOVEFILE_REPLACE_EXISTING);
		if(!ret)
		{
			MessageBox(NULL,_T("未能找到更新包update.dat! "),_T("提示"),MB_ICONERROR);
			MoveFileEx(
				m_Recorder.GetAppPath()+_T("/update.bak"),
				m_Recorder.GetAppPath()+_T("/*****.exe"),
				MOVEFILE_REPLACE_EXISTING);
			return FALSE;
		}

		CString updateHtmPath=basePath+_T("/LoadFile/update/update.htm");
		CEMsgBoxUpdateDlg dlg(updateHtmPath);
		m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal();
		m_Recorder.SetIsAutoLogin(FALSE);
		m_Recorder.SetCurrentVersion(m_lpCmdLine);
		return TRUE;
	}
	catch(...)
	{
		MessageBox(NULL,_T("更新文件失败! "),_T("提示"),MB_ICONERROR);
		//还原文件
		MoveFileEx(
			m_Recorder.GetAppPath()+_T("/update.bak"),
			m_Recorder.GetAppPath()+_T("/*****.exe"),
			MOVEFILE_REPLACE_EXISTING);
		return FALSE;
	}


	// 删除上面创建的 shell 管理器。
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;
}









        
利用MFC的CFtpConnection类实现递归下载文件夹 一、用到的CInternetSession、CFtpConnection类的接口 接口名称 输入 输出 功能说明 CInternetSession::GetFtpConnection() 1. FTP服务器名称 2.用户名 3.登录密码 4.端口号 5.主动模式/被动模式 CFtpConnection对象的指针 GetFtpConnectio 阅读详情

相关推荐

MFC实现HTTP文件下载指南

MFC(Microsoft Foundation Classes)是一个用于简化Windows应用程序开发的C++库。它提供了一组封装了Windows API的类,这些类使得创建用户界面、处理输入输出以及管理应用程序资源变得更加容易。MFC被设计为一个对象框架,允许开发者利用面向对象的方法来构建应用程序。

weixin_28999139的博客 1162

MFC上位机与STM32下位机通讯精讲

本课程主要介绍C++类库MFC上位机与STM32单片机的RS232、RS422、RS485、USB、LWIP以太网、CAN等接口进行稳定通信。课程主要从MFC和STM32基础开始,以编写上位机以及下位机为主,非常注重实践。

MFC框架下的HTTP文件下载器源码剖析

微软基础类库(Microsoft Foundation Classes,简称MFC)是微软为了简化Windows应用程序开发而提供的一个C++类库。自1992年随Visual C++ 1.0发布以来,MFC一直扮演着推动Windows应用开发的重要角色。尽管在跨平台开发和现代框架如.NET的兴起下,MFC的使用有所减少,但在Windows平台上,MFC仍被广泛应用于各种桌面应用的开发中。在进行HTTP下载时,客户端(如浏览器或自定义下载程序)需要遵循特定的步骤来获取服务器上的文件。

weixin_33240461的博客 822

通用固件等多设备多固件下载烧录工具设计 MFC工程转为console应用 支持平台高通QualComm MTK 展锐 移远 兆讯1902,1902T,1903 美信max32555等

4.自动识别串口,vid,pid,mi确定唯一串口,确定ap型号。控制台输出的一行,进度++,达到90时进度回到20,只是让进度动起来。目的:一个设备里有多个芯片,每个芯片为不同平台。为了节约成本,把所有固件放在一个工位一个工具中下载。2.配置config.ini 中的串口(也能配置为自动串口),路径也可以在界面设置。MFC改为命令行交互,双击打开为MFC应用,命令行打开为console应用。双击打开效果,不带参数。再点下载,下载完成的都重新开始。2.把各厂家接口统一封装为console应用,统一接口。

chenhao0568的专栏 695

VC/MFC实现高效文件下载与进度监控

CInternetSession类是Microsoft Foundation Classes (MFC) 提供的一个用于管理与Internet服务供应商(ISP)的连接的类。它负责初始化WinInet库,建立与ISP的连接,并在进行任何类型的Internet会话(如HTTP、FTP等)之前提供一个起点。通过创建CInternetSession对象,程序可以实现通过URL来访问Internet资源,而无需处理底层协议的复杂性。

weixin_28872035的博客 1184

VC/MFC 文件下载及进度

VC/MFC 文件下载及进度、当前速度。

Debug模式应用程序输出Debug调试信息

// Debug模式,主要输出一些调试的信息。 #ifdef UNICODE #define _FILE_ _STR2WSTR(__FILE__) #define _FUNCTION_ _STR2WSTR(__FUNCTION__) #else #define _FILE_ __FILE__ #define _FUNCTION_ __FUNCTION__ #endif #

God,please give me a little more time .... 3137

MFC 文件操作

MFC 文件操作

基于MFC的简单串口通信(针对单片机简单通信)

最近由于项目需要自学了MFC的界面设置(初学者),在基本功能设置完成之后,老大觉得并不需要了,也就没被采纳。但我觉得还是以博客的形式写出来,既能回顾一下学习过程,又能帮助大家。 开发环境 MFC的开发环境是Visual C++,也叫VC++。MFC(Microsoft Foundation Classes)是微软基础类库的简称,是一个微软实现的C++类库,主要封装大部分的Windows API函数...

qq_31790697的博客 2080

vue项目基于WebRTC实现一对一音视频通话

vue项目基于WebRTC实现一对一音视频通话。完整代码gitee地址: https://gitee.com/wade-nian/wdn-webrtc.git。

qq_920189602的博客 6647

Prometheus常用配置介绍

除了 scrape_configs 外,上部还有 global 和 rule_files 部分, 其中 global 中 是 全 局 参 数 , scrape_interval 指 定 全 局 默 认 的 时 间 间 隔 , evaluation_interval 指定告警规则校验的时间间隔,rule_files 指定了告警规 则文件的位置名称。• annotations(注释):它们被用于存储更长的其他信息,例如警报描述 或者链接,注释值也可以被模板化。• alert:告警的名称。

weixin_42886699的博客 2259

VC++拾遗(4)-应用程序类

完成MFC程序的初始化、启动运行和结束等工作。

The research on computer technolog 375

Ansys Zemax实战:5步搞定多模光纤耦合效率优化(附IMAE操作数详解)

本文详细介绍了使用Ansys Zemax优化多模光纤耦合效率的5个关键步骤,包括几何图像分析设置、IMAE操作数应用及偏振效应处理。通过实战案例解析,帮助工程师快速掌握光纤耦合效率提升技巧,特别针对IMAE操作数的配置保存机制和菲涅尔损耗控制进行深度讲解。

potato的博客 690

MFC框架下的 C++ 实现文件下载功能

CRomoteClientDlg::OnDownloadFile() 这个函数用于从远程服务器下载文件,并保存到本地。

Ll1304525298的博客 1778

【C语言】程序员筑基功法——《函数栈帧的创建与销毁》

汇编角度带你走进函数栈帧

StackFrame 3656

构建栅格地图matlab代码

1 使用MATLAB实现地图栅格化 效果图如下所示 图1 ...

qq_59747472的博客 4516

MFC文件下载

1.CInternetSession          使用类CInternetSession 创建并初始化一个或多个同时的Internet会话。如果需要,还可描述与代理服务器的连接。如果Internet 连接必须在应用过程中保持着,可创建一个类CWinApp的CInternetSession成员。一旦已建起Internet 会话,就可调用OpenURL。CInternetSession

C# 5753

LoRA 完整解析:从理论到实践

LoRA(低秩适应)是一种高效的大模型微调方法,通过添加少量可训练参数(低秩矩阵)来适配新任务,避免全参数微调的高成本。其核心是将权重更新ΔW分解为两个小矩阵B×A的乘积,大幅减少训练参数量(仅0.1-1%)。LoRA基于内在维度假设,通过低秩约束捕捉核心任务信息,兼具效率与效果。实际应用中,常用配置为秩r=16-32,目标模块选择注意力层的q_proj和v_proj,学习率比全参数微调大10倍(约1e-4)。优势包括参数高效(内存降低60-80%)、多任务适配灵活、保留预训练知识等,已成为大模型微调的主流

echo的博客 1410

【免费下载】 mfc100.dll 文件下载

mfc100.dll 文件下载 【下载地址】mfc100.dll文件下载 本仓库提供了一个名为 `mfc100.dll.zip` 的资源文件下载。该文件是一个动态链接库(DLL)文件,通常用于支持某些软件或程序的正常运行。如果在运行某软件或编译程序时提示缺少、找不到 `mfc100.dll` 等类似提示,您可以通过下载本...

gitblog_09776的博客 1903

在Windows 10/11上使用Qt和SOEM构建EtherCAT主站:工业控制新纪元

☑️ Windows平台上的EtherCAT主站☑️ 微秒级精度的实时控制☑️ 动态设备配置与管理☑️ 直观的Qt监控界面☑️ 分布式时钟同步“技术不是取代人类的工具,而是拓展人类能力的翅膀。当我们在Windows上实现微秒级精度的工业控制时,不是在征服机器,而是在创造人与机器和谐共舞的新舞台。集成AI异常检测算法支持EtherCAT G协议云端监控与远程诊断完整项目代码预编译SOEM库示例视频教程。

QQ_778132974的博客 633

uniapp - 强力解决H5网页浏览器跨域问题,如何解决uniapp请求接口在浏览器跨域问题,UniApp H5 跨域代理配置详细教程完美解决所有uniapp跨域(调用第三方接口或服务器api跨域)

uni-app 跨域,uniApp解决h5跨域问题,解决uni-app请求接口在浏览器跨域问题,uni.request请求跨域问题解决方案,uni-app-跨域解决方法,彻底解决uniapp发布为H5的跨域问题,uniapp H5页面设置跨域请求_uniapp h5跨域配置,uniapp开发 H5 解决跨域问题,uniApp请求解决跨域问题,uniapp request如何实现前端请求跨域,解决uniapp调试过程中的请求跨域和环境配置,Uniapp调用外部api接口跨域请求,uni-app发布H5页面跨域

🏆 前端领域优质创作者 5352

[MFC]下载一个url的源文件到本地文件

...{    //GetUrlSource("http://www.163.com");    // TODO: Add your control notification handler code here    CString m_theUrl = _T("http://www.163.com"/**//*"file://C:/cmd.txt"*/);    CString filena

believefym的专栏 4275

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【免费下载】 mfc140u.dll 64位文件下载

mfc140u.dll 64位文件下载 【下载地址】mfc140u.dll64位文件下载 本仓库提供了一个名为 `mfc140u.dll` 的64位文件,该文件主要用于解决在使用IAR开发工具时遇到的以下问题:**问题描述:**由于找不到 `mfc140u.dll`,无法继续执行代码 ...

gitblog_09736的博客 6036

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【免费下载】 mfc110.dll 文件下载

mfc110.dll 文件下载 【下载地址】mfc110.dll文件下载 mfc110.dll 文件下载本仓库提供了一个名为 `vcredist(mfc110.dll).zip` 的资源文件下载 项目地址: https://git...

gitblog_09706的博客 560

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++使用MFC下载文件显示进度条示例:让文件下载更直观高效

C++使用MFC下载文件显示进度条示例:让文件下载更直观高效 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在软件开发领域,文件下载是一个常见需求,如何让用户在等待的过程中能够直观地了解下载进度,提高用户体验呢?今天,我们就来推荐一个开源项目——C++使用MFC下载文件显示进度条示例。该项目基于C++语言和MFC框架,提供了一个简洁直观的界面,让用户在下载文件的同时,...

gitblog_06721的博客 797

C++使用MFC下载文件显示进度条示例

C++使用MFC下载文件显示进度条示例 去发现同类优质开源项目:https://gitcode.com/ 此压缩包包含了一个使用C++语言和MFC(Microsoft Foundation Classes)框架实现的网络文件下载示例。该示例不仅可以实现文件的下载,还能同步显示下载进度条。用户只需输入下载文件的URL,即可启动下载流程。 功能特点 基于MFC框架,界面友好,操作简便。 支持从网络下...

gitblog_06736的博客 337
上一篇: python调用C# Com 的dll
下一篇: 送给程序员:关于性格内向者的10个误解
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值