MFC CInternetSession OpenUrl 下载文件 防止异常

MFC文件下载实战:多线程、进度显示与WinINet封装 在Windows桌面应用开发中,多线程编程是解决界面响应性问题的核心技术,它允许耗时的网络I/O操作在后台执行,避免阻塞主线程的消息循环。其原理是通过创建独立的工作线程处理任务,并通过线程间通信机制(如消息传递、回调函数)将结果安全地传回UI线程。这一技术对于实现流畅的用户体验至关重要,尤其在需要实时反馈的网络操作中。在MFC框架下,结合WinINet API进行HTTP/HTTPS文件下载是典型的应用场景。通过封装CFileDownloader类,可以优雅地实现异步下载、实时进度更新、错误处理与流程控制, 阅读详情
	HINTERNET hOpen = InternetOpen (NULL,PRE_CONFIG_INTERNET_ACCESS,NULL,  NULL, 0);
	HINTERNET hRequest = InternetOpenUrl (hOpen, m_theUrl,NULL, 0, INTERNET_FLAG_TRANSFER_BINARY,0);
	if( hOpen )
	{
		InternetCloseHandle(hOpen);
	}
	
	if(!hRequest)return FALSE;
	
	InternetCloseHandle(hRequest);

	CInternetSession session;
	CInternetFile* remoteFile =(CInternetFile*)session.OpenURL(
		m_theUrl,1,
		INTERNET_FLAG_TRANSFER_BINARY|
		INTERNET_FLAG_DONT_CACHE);
	if(!remoteFile)
	{
		remoteFile->Close();
		delete remoteFile;
		session.Close();
		return FALSE;
	}
	DWORD statusCode;
	((CHttpFile *)remoteFile)->QueryInfoStatusCode(statusCode);
	if (statusCode==404)return FALSE;
	
	CFile localFile;//MZ?
	if(localFile.Open(localFilename,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary,NULL))
	{
		int readlen = -1;
		char buf[1024];
		while(1)
		{
			readlen = remoteFile->Read(buf,1024);
			if(readlen == 0)
			{
				break;
			}
			localFile.Write(buf,readlen);
			ZeroMemory(buf,1024);
		}
		localFile.Close();
	}
	
	remoteFile->Close();
	session.Close();
	delete remoteFile;

使用 InternetOpen 和 InternetOpenUrl来判断 Url是否存在

否则直接OpenUlr会造成异常

基于MFC的HTTP下载实战教程 本文还有配套的精品资源,点击获取 简介:该文件是一个示例程序,演示如何使用Microsoft Foundation Class (MFC) 库中的CInternetSession类实现HTTP下载功能。通过MFC框架和CInternetSession类,开发者能够创建互联网会话并管理下载过程,包括连接管理、错误处理、安全设置和缓存策略。该程序还可能包含源代码文件,如http... 阅读详情

相关推荐

Reeds-Shepp曲线公式推导及代码实现-第三部分(共三部分)

根据原始起点的坐标和航向,将上一小节计算出来的局部进行整体的平移和旋转(与归一化的步骤刚好相反),最终得到全局路径的轨迹。根据计算出来的路径,选择路径最短的轨迹(也可根据我们实际的需要定制选优规则),作为最终的轨迹输出。Reeds-Shepp曲线公式推导及代码实现-第一部分(共三部分)Reeds-Shepp曲线公式推导及代码实现-第二部分(共三部分)的值进行等步长插值,得到每段轨迹对应的生成一系列插值距离列表。根据上一步生成的插值距离列表的值,计算其对应的局部位姿值。后,我们需要根据字段类型(

jianmo的博客 1087

记一次WEB数据采集程序开发经历——对付简单的动态加载

自从学做网站账号批量注册机、图片批量下载器,开始接触HTTP协议,了解了基本的GET/POST请求等知识,于是便开始着手开发一些小东西了。 WEB数据采集,很多人都在搞。据说搞WEB数据采集用JAVA会更方便,有很多现成的类库可用。可以说WEB数据采集这块,是C++的短板。我目前能想到的方法就是利用WinInet,这是一组关于Intelnet三大协议HTTP、FTP、Gopher的windows

软件架构农 6339

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

MFC使用的OpenURL下载网页数据必要时要去除缓存

MFC用OpenURL获取网络摄像头数据时,发现程序运行期间每一次获取的结果都一样,而实际上结果数据已经改变了。 只有重新运行才能获取最新结果,因此考虑到可能后面读取到的都是第一次的缓存。 解决方法:修改函数第三个参数为INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD,强制重新获取结果。 file = (CHttpFile*)sessio...

不积跬步无以至千里 837

RISC-V嵌入式开发实战:手把手教你读懂并修改CH32V103的链接脚本(.ld)

本文深入解析RISC-V嵌入式开发中CH32V103链接脚本(.ld)的编写与优化技巧。从内存布局、段分配到实战调试,详细讲解如何解决程序跑飞、变量异常等典型问题,特别针对RISC-V架构的gp寄存器优化、中断向量表处理等特性提供专业指导,帮助开发者充分利用64KB Flash和20KB RAM资源。

weixin_33704234的博客 172

Sublime Text4代码配色自定义方案

关于Sublime Text对于我的使用体验,只能说内置的代码主题真的都太low了,一点都不好看。所以接下来我分享一下我自定义代码配色。当然,大家也可以通过我给的中文翻译注释来自定义自己喜欢的颜色。废话不多说,直接上代码直接将代码复制粘贴到:Preferences > Customize Color Scheme 即可。},"globals":"foreground": "var(white)", // 前景色。

追求细节,成就完美 6026

解决OpenUrl函数总是得到缓存数据的问题

CInternetSession::OpenURL的问题. CStdioFile* OpenURL( LPCTSTR pstrURL, //文件URL地址  DWORD dwContext = 1, //上下文ID  DWORD dwFlags = INTERNET_FLAG_TRANSFER_ASCII, //标记  LPCTSTR pstrHeaders = NULL, //发送到服务

xin_yu_xin的专栏 6450

Vmware安装windowsServer2022版本

全网最详细的Vmware安装windowsServer2022版本

A乐神的博客 7004

MFC web文件 CHttpFile的使用初探

MFC简单使用CHttpFile

架构师之路,举步维艰。 1031

飞腾Ubantu22.04.3安装OpenNebula测试

因OpenneBula官方镜像源只有AMD架构的镜像包不存在ARM的镜像包,借此用源码编译进行测试。

坚持就是胜利的博客 1008

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 997

CInternetSession类OpenURL函数异常问题

最近在做项目过程中,用到了读取网页(现在以百度首页为例)上的数据,代码如下:        CInternetSession session("HttpClient");           char * url = "www.baidu.com";           CHttpFile* pfile = (CHttpFile *)session.OpenURL(url);

wghhdzwzqbx02的专栏 4313

勇攀数字高峰

摘要:该题目要求在数字地形图中寻找从最低点到最高点的所有严格递增登山路径。采用DFS深度优先搜索结合回溯算法,通过标记已访问位置并检查高度差限制(0<diff≤maxDiff)来遍历所有可能路径。算法首先确定起点(最低点)和终点(最高点),然后进行DFS搜索,每步移动需满足四个方向的合法移动且高度严格递增。最终输出符合条件的路径总数。提供了C++、Java和Python三种实现方案。

面试高手的博客 617

调用CInternetSession::OpenURL()时的一个问题。

调用CInternetSession::OpenURL()时的一个问题。楼主mychen(云居龙龙)2005-12-22 11:25:06 在 VC/MFC / 网络编程 提问我的程序是这样的,当获取到一文件的URL时,就开一线程下载它。下面这是下载线程中的一部分:         CInternetSession   session;     DWORD   dwFlags   =  

c0ffee1982的专栏 2870

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

CHttpFile下载文件小例子

利用MFC类里CHttpFile CInternetSession CFile 等实现网络下载功能

Lasuerte的博客 1988

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

c++实现查询天气预报

原地址:http://blog.youkuaiyun.com/x_iya/article/details/8583015 用到的函数、API等 1、中央气象台API返回的JSON数据(http://m.weather.com.cn/data/101010100.html) 2、外网获取IP(http://ip.dnsexit.com/index.php) 3、Sqlite(1中的城...

836811384 596

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CInternetSession的使用

1. CInternetSession的简单使用CInternetSession session;CHttpFile *file = NULL; CString strURL = " http://www.20abcd.com";CString strHtml = "”;   //存放网页数据 try{       file = (CHttpFile*)session.

muzi_yun的专栏 2万+

C++天气预报小软件

前言:这个东西是八月份自己捣鼓着玩的 现记录下 需要解决的问题:1.选择对应的接口(稳定,最好使用官方提供的)2.获取数据2.对返回数据的处理 问题1:天气接口的获取 =>通过城市名 来获取当前城市的温度以及未来一周的天气变化(Json数据) [返回数据为乱码] 接口:http://wthrcdn.etouch.cn/weather_mini?city=北京市 =>通过城市...

JamesWu9527的博客 3366

MFC下载网络文件到本地计算机

此方法依赖wininet.lib 属性 - 配置属性 - 链接器 - 输入 - 附加依赖项 - 编辑 实现代码如下 #include "WinInet.h" #define MAXBLOCKSIZE 1024 /*! * @brief 下载一个文件到本地计算机 * * @param const CString& url 文件链接 * @param const CString& savePath 文件保存到本地计算机的文件夹路径 * * @return bool 下载成功

qq_28742901的博客 562

mfc 获得服务器文件信息,VC编程之VC 读取服务器上的文件(HTTP方式)

本文主要向大家介绍了VC编程之VC 读取服务器上的文件(HTTP方式),通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。CString GetStringFromUrl(LPCTSTR pszUrl){CString str ;HINTERNET hSession = ::InternetOpen( _T("4399GameBox") , INTERNET_OPEN_TYPE_PRECO...

weixin_34785304的博客 385

使用CInternetSession CHttpFile下载网页链接地址的文件

思路很清晰,使用CInternetSession创建CHttpFile对象。然后对该对象获取文件信息、进行文件读写操作均可。 void DownloadFile(LPCTSTR szURL, LPCTSTR szFile) //szURL 表示网页地址 szFile 表示保存本地的路径(及要保存的文件名) 感谢网友oceansoft http://blog.chinaunix.net/uid...

weixin_33910385的博客 302
上一篇: C++ 析构函数
下一篇: Python 实现简单的C/S在线更新程序
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值