#include #include #include #include #include namespace fs = std::filesystem; bool IsAdmin() { BOOL isAdmin = FALSE; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; PSID AdminGroup; if (AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdminGroup)) { if (!CheckTokenMembership(NULL, AdminGroup, &isAdmin)) { isAdmin = FALSE; } FreeSid(AdminGroup); } return isAdmin == TRUE; } void CleanDirectory(const fs::path& dir, size_t& deletedCount, size_t& errorCount) { if (!fs::exists(dir)) { std::cout << "目录不存在: " << dir << std::endl; return; } for (const auto& entry : fs::directory_iterator(dir)) { try { if (fs::is_regular_file(entry)) { fs::remove(entry); deletedCount++; } } catch (const std::exception& e) { std::cerr << "删除文件失败: " << entry.path() << " - " << e.what() << std::endl; errorCount++; } } } int main() { try { if (!IsAdmin()) { std::cerr << "请以管理员身份运行此程序以清理所有目录" << std::endl; } auto start = std::chrono::high_resolution_clock::now(); size_t totalDeleted = 0; size_t totalErrors = 0; // 定义要清理的目录列表 std::vector directories = { "C:\\Windows\\Temp", fs::path(std::getenv("USERPROFILE")) / "AppData" / "Local" / "Temp", "C:\\Windows\\SoftwareDistribution\\Download", "C:\\Windows\\Logs", "C:\\Windows\\Minidump" }; // 只有管理员才能清理Prefetch目录 if (IsAdmin()) { directories.push_back("C:\\Windows\\Prefetch"); } // 清理每个目录 for (const auto& dir : directories) { size_t dirDeleted = 0; size_t dirErrors = 0; std::cout << "正在清理: " << dir << std::endl; CleanDirectory(dir, dirDeleted, dirErrors); totalDeleted += dirDeleted; totalErrors += dirErrors; std::cout << "已删除 " << dirDeleted << " 个文件" << std::endl; } auto end = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast(end - start); std::cout << "\n清理完成:" << std::endl; std::cout << "总共删除文件数: " << totalDeleted << std::endl; std::cout << "总共错误数: " << totalErrors << std::endl; std::cout << "耗时: " << duration.count() << " 毫秒" << std::endl; } catch (const std::exception& e) { std::cerr << "发生错误: " << e.what() << std::endl; return 1; } return 0; }