当前位置: 首页 > news >正文

C system()函数调用删除Windows临时目录下的所有文件

#include <stdio.h>
#include <stdlib.h>int main() {// 删除Windows临时目录下的所有文件和子目录system("del /s /q %temp%\\*.*");system("for /d %x in (%temp%\\*) do @rd /s /q \"%x\"");printf("Temporary files and directories deleted successfully.\n");return 0;
}

代码解释

  • 第一个 system() 调用仍然是删除临时目录下的所有文件。
  • 第二个 system() 调用使用了一个 for 循环配合 rd 命令来删除所有子目录:
    • for /d %x in (%temp%\\*) do @rd /s /q "%x" 这行命令的作用是遍历 %temp% 目录下的每一个子目录,并使用 rd(remove directory)命令来递归地删除这些目录及其包含的所有内容。
    • /d 参数用于循环遍历所有子目录。
    • @rd /s /q 用于静默模式递归删除目录。其中,/s 是递归删除目录的内容,/q 是不提示用户确认。

----------

代码解释

  • DeleteDirectoryContents 函数使用 Windows API 遍历指定目录下的所有文件和子目录。
  • 使用 FindFirstFileFindNextFile 遍历文件,DeleteFile 删除文件,RemoveDirectory 删除目录。
  • 避免了使用 system() 函数,减少了由于外部命令注入带来的安全风险。
#include <windows.h>
#include <stdio.h>void DeleteDirectoryContents(const char *sDir) {WIN32_FIND_DATA fdFile;HANDLE hFind = NULL;char sPath[2048];// 构建文件路径模式sprintf(sPath, "%s\\*.*", sDir);if ((hFind = FindFirstFile(sPath, &fdFile)) == INVALID_HANDLE_VALUE) {printf("Path not found: [%s]\n", sDir);return;}do {// 忽略 "." 和 ".."if (strcmp(fdFile.cFileName, ".") != 0 && strcmp(fdFile.cFileName, "..") != 0) {sprintf(sPath, "%s\\%s", sDir, fdFile.cFileName);// 如果是目录, 递归调用自身if (fdFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {DeleteDirectoryContents(sPath);if (RemoveDirectory(sPath)) { // 尝试删除目录printf("Directory deleted: %s\n", sPath);} else {printf("Failed to delete directory: %s\n", sPath);}}else {if (DeleteFile(sPath)) { // 尝试删除文件printf("File deleted: %s\n", sPath);} else {printf("Failed to delete file: %s\n", sPath);}}}} while (FindNextFile(hFind, &fdFile)); // 查找下一个文件FindClose(hFind);
}int main() {char tempPath[MAX_PATH];GetTempPath(MAX_PATH, tempPath); // 获取临时文件夹路径printf("Deleting contents of: %s\n", tempPath);DeleteDirectoryContents(tempPath);printf("Cleanup completed.\n");return 0;
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《AI音频类工具之九——Stable Audio​ 》
  • 【前端】NodeJS:项目上线
  • Ubuntu视频工具
  • 编程参考 - 头文件中使用static inline
  • Spring Cloud Gateway 请求转发源码分析
  • AI预测福彩3D采取888=3策略+和值012路或胆码测试8月17日新模型预测第59弹
  • 学习笔记--算法(滑动窗口)9
  • 2.1算法的时间复杂度与空间复杂度
  • Keepalived 企业应用示例
  • tcpdump的使用
  • 思二勋:web3.0是打造应对复杂市场敏捷组织的关键
  • SpringBoot依赖之Spring Data Redis 一 Hash类型
  • VirtualBox安装Oracle Linux 7.9全流程
  • 【秋招笔试】8.17京东秋招第二场(后端岗)-三语言题解
  • 什么是OpenTiny?
  • __proto__ 和 prototype的关系
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【知识碎片】第三方登录弹窗效果
  • Angular 响应式表单 基础例子
  • Docker容器管理
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Map集合、散列表、红黑树介绍
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Zepto.js源码学习之二
  • 阿里云购买磁盘后挂载
  • 初识 beanstalkd
  • 力扣(LeetCode)21
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 入手阿里云新服务器的部署NODE
  • 通过git安装npm私有模块
  • 学习笔记:对象,原型和继承(1)
  • ​Linux·i2c驱动架构​
  • ​批处理文件中的errorlevel用法
  • # Kafka_深入探秘者(2):kafka 生产者
  • #LLM入门|Prompt#3.3_存储_Memory
  • $(function(){})与(function($){....})(jQuery)的区别
  • ${ }的特别功能
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (C语言)逆序输出字符串
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (windows2012共享文件夹和防火墙设置
  • (zt)最盛行的警世狂言(爆笑)
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (汇总)os模块以及shutil模块对文件的操作
  • (十二)Flink Table API
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十三)Flink SQL
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)汇编语言——简单程序
  • (转) Android中ViewStub组件使用
  • (转)程序员技术练级攻略
  • .gitignore
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET未来路在何方?
  • @RequestBody与@ResponseBody的使用