|
|
发表于 2025-7-6 13:15:51
|
显示全部楼层
以下是针对您提供的清理C盘缓存工具代码的分析和改进建议:
### 主要问题分析
1. **未定义变量**:`temp_dirs` 和 `browser_cache_dirs` 未赋值
2. **潜在风险**:直接删除 `$Recycle.Bin` 可能引发权限问题
3. **浏览器缓存处理**:缺少浏览器缓存路径和文件模式定义
4. **路径兼容性**:部分路径拼接缺少容错处理
### 改进后的完整代码
- import os
- import shutil
- import tempfile
- import time
- import sys
- import glob
- def safe_clean_temp_files():
- """安全清理临时文件"""
- print("正在安全清理临时文件...")
- # 定义临时目录列表(补充定义)
- temp_dirs = [
- tempfile.gettempdir(),
- os.path.join(os.environ.get('SystemRoot', 'C:\\Windows'), 'Temp'),
- os.path.join(os.environ['LOCALAPPDATA'], 'Temp')
- ]
-
- for temp_dir in temp_dirs:
- try:
- if os.path.exists(temp_dir):
- for root, dirs, files in os.walk(temp_dir):
- for name in files:
- try:
- file_path = os.path.join(root, name)
- # 只删除7天前的临时文件
- if os.path.getmtime(file_path) < time.time() - 7 * 24 * 3600:
- os.remove(file_path)
- except (PermissionError, OSError):
- continue
- print(f"已安全清理: {temp_dir}")
- except Exception as e:
- print(f"清理 {temp_dir} 时出错: {e}")
- def clean_recycle_bin_with_confirmation():
- """带确认的清空回收站(改进权限处理)"""
- print("\n警告: 此操作将永久删除回收站中的所有文件!")
- confirm = input("确定要清空回收站吗? (y/n): ").lower()
- if confirm == 'y':
- try:
- # 更安全的回收站路径获取方式
- from win32com.shell import shell, shellcon
- shell.SHEmptyRecycleBin(None, None, 0)
- print("回收站已清空")
- except ImportError:
- print("请安装pywin32模块: pip install pywin32")
- except Exception as e:
- print(f"清空回收站时出错: {e}")
- else:
- print("跳过回收站清理")
- def clean_old_files(directory, days=30):
- """清理指定目录中超过指定天数的文件"""
- if not os.path.exists(directory):
- return
-
- cutoff = time.time() - days * 24 * 3600
- for filename in os.listdir(directory):
- filepath = os.path.join(directory, filename)
- try:
- if os.path.getmtime(filepath) < cutoff:
- if os.path.isfile(filepath):
- os.remove(filepath)
- elif os.path.isdir(filepath):
- shutil.rmtree(filepath)
- except (PermissionError, OSError):
- continue
- def safe_clean_downloads():
- """安全清理下载文件夹"""
- print("正在安全清理下载文件夹...")
- downloads_path = os.path.join(
- os.environ.get('USERPROFILE', 'C:\\Users'),
- 'Downloads'
- )
- clean_old_files(downloads_path, days=30)
- print("下载文件夹已安全清理")
- def clean_thumbnail_cache():
- """清理缩略图缓存"""
- print("正在清理缩略图缓存...")
- thumb_cache = os.path.join(
- os.environ.get('LOCALAPPDATA', 'C:\\Users'),
- 'Microsoft\\Windows\\Explorer'
- )
- if os.path.exists(thumb_cache):
- for filename in glob.glob(os.path.join(thumb_cache, 'thumbcache_*.db')):
- try:
- os.remove(filename)
- except (PermissionError, OSError):
- continue
- print("缩略图缓存已清理")
- def get_disk_usage():
- """显示磁盘使用情况"""
- total, used, free = shutil.disk_usage("C:\")
- print("\n磁盘空间信息:")
- print(f"总空间: {total // (2**30)} GB")
- print(f"已使用: {used // (2**30)} GB")
- print(f"剩余空间: {free // (2**30)} GB")
- def clean_old_browser_cache(days=30):
- """清理超过指定天数的浏览器缓存"""
- appdata_local = os.getenv('LOCALAPPDATA')
- if not appdata_local:
- return
-
- # 补充浏览器缓存路径定义
- browser_cache_dirs = [
- os.path.join(appdata_local, 'Google', 'Chrome', 'User Data'),
- os.path.join(appdata_local, 'Microsoft', 'Edge', 'User Data'),
- os.path.join(appdata_local, 'Mozilla', 'Firefox', 'Profiles')
- ]
-
- cutoff_time = time.time() - days * 24 * 3600
-
- for cache_dir in browser_cache_dirs:
- if not os.path.exists(cache_dir):
- continue
-
- # 查找所有Profile的Cache目录
- for profile_dir in glob.glob(os.path.join(cache_dir, '*')):
- cache_path = os.path.join(profile_dir, 'Cache')
- if os.path.exists(cache_path):
- print(f"正在检查: {cache_path}")
- for root, _, files in os.walk(cache_path):
- for file in files:
- file_path = os.path.join(root, file)
- try:
- if os.path.getmtime(file_path) < cutoff_time:
- os.remove(file_path)
- except:
- continue
- def main():
- print("C盘安全清理工具 (仅使用内置库)")
- print("=" * 50)
-
- start_time = time.time()
-
- # 执行安全清理操作
- safe_clean_temp_files()
- clean_recycle_bin_with_confirmation()
- safe_clean_downloads()
- clean_thumbnail_cache()
- clean_old_browser_cache()
-
- # 显示清理结果
- get_disk_usage()
-
- end_time = time.time()
- print(f"\n安全清理完成! 耗时: {end_time - start_time:.2f}秒")
- input("按Enter键退出...")
- if __name__ == "__main__":
- main()
复制代码
### 关键改进说明
1. **补充缺失定义**:
- 添加了 temp_dirs 默认值
- 添加了 browser_cache_dirs 常见浏览器路径
2. **回收站清理优化**:
- 使用 win32com.shell 安全清空回收站
- 添加模块缺失时的友好提示
3. **路径处理增强**:
- 使用 os.path.join 确保路径兼容性
- 添加 os.environ.get() 的默认值
4. **缩略图缓存清理**:
- 使用 glob.glob('thumbcache_*.db') 精确匹配
### 使用注意事项
1. 回收站清理需要额外安装模块:
2. 首次运行时建议关闭所有浏览器
3. 部分系统文件需要管理员权限运行
> 注意:清理系统文件存在风险,建议重要数据提前备份!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|