一种是使用易语言自带的命令(简单直接),另一种是调用Windows API(更底层、更灵活)。

(图片来源网络,侵删)
使用易语言“删除目录”命令(推荐,最简单)
这种方法最简单,直接利用易语言提供的“删除目录”命令,它会清空指定目录下的所有文件和子文件夹。
核心原理:
- 获取当前用户的IE缓存目录路径。
- 使用“删除目录”命令清空该路径下的所有内容。
- (可选)重新创建一个空的缓存目录,因为有些程序可能依赖这个目录存在。
完整代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 ie缓存路径, 文本型
' 获取IE缓存路径
ie缓存路径 = 取IE缓存目录路径 ()
' 判断路径是否有效
.(ie缓存路径 ≠ "")
信息框 (“正在删除IE缓存...” + #换行 + “路径: ” + ie缓存路径, 0, , )
' 删除缓存目录下的所有内容
' 注意:删除目录会清空整个目录,包括所有子文件夹和文件
删除目录 (ie缓存路径, , 假)
' 删除后,可以尝试重新创建一个空目录,避免某些程序出错
' 创建目录 (ie缓存路径)
信息框 (“IE缓存删除成功!”, 0, , )
.否则
信息框 (“无法获取IE缓存路径!请检查您的系统设置。”, 16, , )
.结束如果
' 结束程序
关闭窗口_启动窗口 ()
' =================================================================
' 自定义子程序:获取IE缓存目录路径
' 返回值:文本型,返回缓存路径,如果失败则返回空文本
' =================================================================
.子程序 取IE缓存目录路径, 文本型
.局部变量 缓存路径, 文本型
.局部变量 临时路径, 文本型
' 获取当前用户的临时文件夹路径,通常是 C:\Users\[用户名]\AppData\Local\Microsoft\Windows\INetCache
临时路径 = 取运行环境目录 (#临时环境)
' 拼接出IE缓存的具体路径
' 注意:不同Windows版本,路径可能略有不同,但INetCache是通用目录
缓存路径 = 临时路径 + “\INetCache”
' 返回拼接好的路径
返回 (缓存路径)
代码解析:

(图片来源网络,侵删)
.子程序 取IE缓存目录路径:这是一个自定义子程序,用于获取IE缓存的路径,我们通过获取系统临时目录(#临时环境),然后拼接上\INetCache来得到最终路径,这是最可靠的方式之一。删除目录 (ie缓存路径, , 假):这是核心命令。ie缓存路径:要删除的目录。- 第二个参数(是否递归)可以省略,默认为真,表示删除目录及其所有内容。
- 第三个参数
假:表示不将文件放入回收站,直接物理删除,这比放入回收站更彻底。
- 注意:直接删除
INetCache目录可能会导致一些IE或依赖IE内核的程序在下次启动时重新创建它,这是正常现象,如果你发现某些程序异常,可以取消注释创建目录 (ie缓存路径)这行代码。
调用Windows API(更底层、更灵活)
如果你不想删除整个目录,而是想只删除特定类型的缓存文件(只删除图片或Cookie),或者需要更精细的控制,那么使用API是更好的选择。
核心原理:
- 使用
SHGetFolderPathAPI 函数获取IE缓存的确切路径。 - 遍历该目录下的所有文件。
- 对每个文件,根据其名称或扩展名判断是否需要删除。
- 使用
DeleteFileAPI 函数删除选定的文件。
完整代码示例:
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 __启动窗口_创建完毕
.局部变量 ie缓存路径, 文本型
.局部变量 文件列表, 文本型, , "0"
.局部变量 i, 整数型
' 定义API函数和常量
.版本 2
.DLL命令 SHGetFolderPathA, , shell32.dll, , 整数型
.参数 hwnd, 整数型
.参数 csidl, 整数型
.参数 hToken, 整数型
.参数 dwFlags, 整数型
.参数 pszPath, 文本型
.常量 CSIDL_INTERNET_CACHE = &H20
.版本 2
.DLL命令 DeleteFileA, , kernel32.dll, , 逻辑型
.参数 lpFileName, 文本型
' 获取IE缓存路径
ie缓存路径 = 取IE缓存路径_API ()
.(ie缓存路径 ≠ "")
信息框 (“正在使用API方式删除IE缓存...” + #换行 + “路径: ” + ie缓存路径, 0, , )
' 获取目录下所有文件
文件列表 = 目录_取文件列表 (ie缓存路径, , , )
' 遍历文件列表
.计次循环首 (取数组成员数 (文件列表), i)
' 在这里可以添加判断条件,只删除特定文件
' 只删除以 "Cookie" 开头的文件
' .(寻找文本 (文件列表 [i], "Cookie", , 假) > 0)
' 删除文件 (ie缓存路径 + "\" + 文件列表 [i])
' .否则如果 (寻找文本 (文件列表 [i], "index.dat", , 假) > 0)
' ' index.dat文件可能正在被系统使用,直接删除可能会失败
' ' 可以尝试强制删除,但这里为了安全,我们跳过
' 跳出循环 ()
' .否则
' ' 删除其他所有文件
' 删除文件 (ie缓存路径 + "\" + 文件列表 [i])
' .如果结束
' 为了演示,我们删除所有文件(除了可能正在使用的)
.(文件列表 [i] ≠ "index.dat")
删除文件 (ie缓存路径 + "\" + 文件列表 [i])
.否则
' 使用API尝试删除正在使用的文件(需要管理员权限,且不一定成功)
' DeleteFileA (ie缓存路径 + "\" + 文件列表 [i])
.如果结束
.计次循环尾 ()
信息框 (“IE缓存文件删除完成!”, 0, , )
.否则
信息框 (“无法通过API获取IE缓存路径!”, 16, , )
.结束如果
' 结束程序
关闭窗口_启动窗口 ()
' =================================================================
' 自定义子程序:使用API获取IE缓存目录路径
' =================================================================
.子程序 取IE缓存路径_API, 文本型
.局部变量 路径缓冲区, 文本型
.局部变量 返回值, 整数型
' 创建一个足够大的缓冲区来接收路径
路径缓冲区 = 取空白文本 (260)
' 调用API获取路径
' 参数说明:
' hwnd=0 (桌面窗口), CSIDL_INTERNET_CACHE, hToken=0, dwFlags=0
返回值 = SHGetFolderPathA (0, CSIDL_INTERNET_CACHE, 0, 0, 路径缓冲区)
' 如果API调用成功 (返回值为0)
.(返回值 = 0)
返回 (路径缓冲区)
.否则
返回 ("")
.如果结束
代码解析:

(图片来源网络,侵删)
- API定义:
SHGetFolderPathA:这是获取特殊文件夹路径的标准Windows API。CSIDL_INTERNET_CACHE是我们需要的常量,代表“Internet Cache”。DeleteFileA:标准的Windows API,用于删除一个文件。
- 获取路径:
取IE缓存路径_API子程序调用SHGetFolderPathA来精确获取缓存路径。 - 遍历和删除:
目录_取文件列表:获取缓存目录下的所有文件名。.计次循环首...循环尾:遍历每一个文件。- 条件判断:代码中包含了注释掉的判断逻辑,展示了如何只删除特定文件(如Cookie),你可以根据自己的需求修改这个判断条件。
index.dat文件:这是一个非常重要的系统文件,用于记录索引信息,它通常正在被系统使用,直接删除会失败,上面的代码跳过了它,这是比较安全的做法,如果你想强制删除,可以尝试调用DeleteFileA,但需要管理员权限且不保证成功。
总结与建议
| 特性 | 方法一 (删除目录) | 方法二 (调用API) |
|---|---|---|
| 优点 | 代码极简,执行速度快,功能强大,一劳永逸。 | 灵活可控,可以精确删除特定类型的文件,保留其他缓存。 |
| 缺点 | “一刀切”,会删除所有缓存文件,无法筛选。 | 代码复杂,需要处理API声明和文件遍历逻辑,且可能无法删除正在使用的系统文件。 |
| 适用场景 | 绝大多数情况,需要彻底清空缓存时。 | 需要精细化管理缓存,例如只清除Cookie或图片,保留页面脚本等。 |
给初学者的建议:
直接使用方法一,它简单、高效、可靠,能满足99%的清除IE缓存的需求,只有当你发现需要更精细的控制时,再去学习和使用方法二。
