标题:如何定向清除FTP下载文件后的缓存数据?
只看楼主
hxy8000
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-11-15
结帖率:85.71%
已结贴  问题点数:20 回复次数:12 
如何定向清除FTP下载文件后的缓存数据?
如何定向清除下载FTP文件后的缓存数据?
在客户端下载FTP的一个文件后,即使此后FTP中的该文件内容发生了更新,但客户端再次下载该文件,文件内容依然没有更新。经查,是IE缓存的原因。
手动解决办法:将客户端的IE历史浏览记录手动清除,再重新下载该文件,内容已经更新。
求助VFP程序实现:客户端下载FTP的一个文件后,在客户端定向清除这个IE缓存文件。
搜索更多相关主题的帖子: 缓存 FTP 清除 文件 定向 
2022-05-07 10:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
试试 Windows API DeleteUrlCacheEntry()
2022-05-07 16:56
hxy8000
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-11-15
得分:0 
lcRemoteUrl="地址"
Declare Integer DeleteUrlCacheEntry In Wininet.Dll String szUrl,String szFileName,Integer dwReserved,Integer lpfnCB
=DeleteUrlCacheEntry(lcRemoteUrl) &&清理缓存

请教“地址”填写什么内容?
2022-05-08 10:06
hxy8000
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-11-15
得分:0 
以下是引用吹水佬在2022-5-7 16:56:10的发言:

试试 Windows API DeleteUrlCacheEntry()

这条语句还是不能将客户端的下载文件缓存数据清除!

请问:有没有更直接一点的语句?可以先找到这个缓存文件夹(“C:\Users\用户名\AppData\Local\Microsoft\Windows\INetCache”手动可以查到该文件夹,代码怎样获取客户端的这个文件夹?可能因操作系统不同或用户修改原因而造成该文件夹路径或名称不同),再删除该缓存文件夹下的下载缓存文件。
2022-05-08 14:36
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:5 
程序代码:
Declare Long SHGetSpecialFolderPath in shell32 Long, String @, Long, Long
cPath = Replicate(Chr(0), 512)
If SHGetSpecialFolderPath(0, @ cPath, 32, 0) != 0
    ? Rtrim(cPath, Chr(0))
EndIf

2022-05-08 20:32
hxy8000
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-11-15
得分:0 
以下是引用csyx在2022-5-8 20:32:12的发言:

Declare Long SHGetSpecialFolderPath in shell32 Long, String @, Long, Long
cPath = Replicate(Chr(0), 512)
If SHGetSpecialFolderPath(0, @ cPath, 32, 0) != 0
    ? Rtrim(cPath, Chr(0))
EndIf

非常感谢!通过以上代码,可以找到IE缓存文件夹了。但是,此文件夹内的缓存文件明明可以看到,也可手工删除,就是FILE()函数不能找到该文件,DELETE FILE 命令也无法删除该文件。真是奇怪!请问这是为何?
本人知道该缓存文件夹下还有下级目录及该缓存文件IE\ABC\**.**,但更是无法捕捉到"ABC"文件夹的名称,因为每次下载相同文件,该"ABC"文件夹的名称总是随机变化.
求助,即时删除从FTP下载文件后的IE缓存文件!
2022-05-09 01:37
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:8 
那就简单的调用Windows让它自己去清除
Declare Long ShellExecute in shell32 Long, String, String, String, String, Long
ShellExecute(0, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 8", "", 0)

你可以把上面的8改为任何你希望清除的类别,完整的选项定义(可以组合):
// This magic value is the combination of the following bitflags:
// #define CLEAR_HISTORY         0x0001 // Clears history
// #define CLEAR_COOKIES         0x0002 // Clears cookies
// #define CLEAR_CACHE           0x0004 // Clears Temporary Internet Files folder
// #define CLEAR_CACHE_ALL       0x0008 // Clears offline favorites and download history
// #define CLEAR_FORM_DATA       0x0010 // Clears saved form data for form auto-fill-in
// #define CLEAR_PASSWORDS       0x0020 // Clears passwords saved for websites
// #define CLEAR_PHISHING_FILTER 0x0040 // Clears phishing filter data
// #define CLEAR_RECOVERY_DATA   0x0080 // Clears webpage recovery data
// #define CLEAR_PRIVACY_ADVISOR 0x0800 // Clears tracking data
// #define CLEAR_SHOW_NO_GUI     0x0100 // Do not show a GUI when running the cache clearing
//
// Bitflags available but not used in this magic value are as follows:
// #define CLEAR_USE_NO_THREAD      0x0200 // Do not use multithreading for deletion
// #define CLEAR_PRIVATE_CACHE      0x0400 // Valid only when browser is in private browsing mode
// #define CLEAR_DELETE_ALL         0x1000 // Deletes data stored by add-ons
// #define CLEAR_PRESERVE_FAVORITES 0x2000 // Preserves cached data for "favorite" websites


[此贴子已经被作者于2022-5-9 03:29编辑过]

2022-05-09 03:16
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
回复 7楼 csyx
学习啦,谢谢!
2022-05-09 05:41
hxy8000
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2010-11-15
得分:0 
该论坛有高手!高手又很热心助人!
非常感谢七楼csyx的帮助,您提供的代码基本可以解决我的问题(清除系统缓存数据,确保用户每次下载的文件是最新的文件,而不是可能的缓存旧文件)
顺附:*!*    ClearMyTracksByProcess函数 与IE缓存相关的参数详解:
*!*    //Temporary Internet Files  (删除Internet临时文件)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8  
*!*    //Cookies (删除cookie)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2  
*!*    //History (删除历史记录)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1  
*!*    //Form Data (删除表单数据)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16  
*!*    //Passwords (删除密码)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32  
*!*    //Delete All  (全部删除)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255  
*!*    //Delete All (全部删除,包括插件的设置和文件)  
*!*    //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351  

虽然上述代码能达到基本使用要求,但还有一点点遗憾:如果能定向清除某一缓存文件就更佳,因为不愿因自己的软件需要而擅自清除客户端的所有缓存文件,以免影响用户可能需要他缓存文件的体验。
再次谢谢csyx及版主等!
2022-05-09 10:24
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:2 
定向应该也是可以的,相关的api有GetUrlCacheEntryInfo,FindFirstURLCacheEntry,FindNextUrlCacheEntry,再配合吹版说的DeleteUrlCacheEntry,应该可以实现你的需求
这里说的定向是指某一网站或URL
前三个api都涉及结构体,我对vfp怎么传送结构体不熟,这个你得向吹版请教

[此贴子已经被作者于2022-5-10 07:27编辑过]

2022-05-09 21:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509022-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062439 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved