解决URLDownloadToFile缓存问题的两种方法【转】

本文介绍了解决URLDownloadToFile缓存问题的两种方法:通过修改URL使其每次请求都视为新请求,以及通过清除缓存再下载。这两种方法可以帮助确保每次下载的都是最新文件。

本文转自:http://www.dtapp.cn/gbook.php?gid=10

查看原文:解决URLDownloadToFile缓存问题

URLDownloadToFile下载文件前先在本地的缓存中查找此文件
如果缓存有则不会再去网上抓最新的文件,所以我们还要解决URLDownloadToFile缓存的问题。

 

方法 1:
我们可以对URL进行改动,让它每次访问不同的URL但指向相同的页面,
例如在URL结尾添加一些无意义的参数:"http://www.dtapp.cn?abc=1"
这里的 ?abc=1 可以随机实现,下次下载则改成 ?abc=2 因为URL不同,所以不会在缓存中找到。
最后程序改成:

/********************************************************/
int nRand = time(NULL); // 用时间作为随机数

CString szUrl;
szUrl.Format("http://www.dtapp.cn?abc=%d", nRand); // 生成随机URL

CString szFileName = "C://dtapp.txt";

if (S_OK == URLDownloadToFile(NULL, szUrl, szFileName, NULL,NULL))
{
// 下载成功
}
else
{
// 下载失败
}

 

方法 2:
使用DeleteUrlCacheEntry清理缓存后再使用URLDownloadToFile下载文件。

/********************************************************/
CString szUrl = "http://www.dtapp.cn";

DeleteUrlCacheEntry (szUrl); // 清理缓存
CString szFileName = "C://dtapp.txt";

if (S_OK == URLDownloadToFile(NULL, szUrl, szFileName, NULL,NULL))
{
// 下载成功
}
else
{}

在VC++中,`URLDownloadToFile` 是一个非常实用的函数,用于从互联网上下载文件并保存到本地。该函数属于 `urlmon.h` 头文件,并且需要链接 `urlmon.lib` 库。 ### 函数原型 ```cpp HRESULT URLDownloadToFile( LPUNKNOWN pCaller, LPCSTR szURL, LPCSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB ); ``` #### 参数说明: - **pCaller**:指向调用者的 `IUnknown` 接口指针。通常设置为 `NULL`。 - **szURL**:要下载的文件的URL地址,例如 `"http://example.com/file.exe"`。 - **szFileName**:保存文件的本地路径和名称,例如 `"C:\\file.exe"`。 - **dwReserved**:保留参数,必须设为 `0`。 - **lpfnCB**:绑定状态回调接口指针,用于监控下载进度。如果不需要,可以设为 `NULL`。 ### 示例代码 以下是一个简单的示例,展示如何使用 `URLDownloadToFile` 下载文件: ```cpp #include <windows.h> #include <urlmon.h> #include <iostream> #pragma comment(lib, "urlmon.lib") int main() { HRESULT hRet = URLDownloadToFile( NULL, // pCaller "http://www.example.com/testfile.exe", // szURL "C:\\testfile.exe", // szFileName 0, // dwReserved NULL // lpfnCB ); if (hRet == S_OK) { std::cout << "文件下载成功!" << std::endl; } else { std::cout << "文件下载失败!错误代码: " << hRet << std::endl; } return 0; } ``` #### 注意事项: 1. 在项目设置中确保包含 `urlmon.h` 并链接 `urlmon.lib`。 2. 确保程序具有写入目标路径的权限。 3. 如果下载的文件较大,建议使用回调函数来监控下载进度[^4]。 ### 文件下载后的处理 一旦文件下载完成,可以通过标准文件操作函数(如 `fopen`, `fread` 等)读取文件内容进行分析或处理[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值