[C语言]删除用户自定义后缀名的所有文件
环境:win7
IDE:DEV-C++
编译器:GCC
编译结果:Success
运行结果:Success
使用说明:
1.输入需要查询的目录,比如e:
2.输入需要删除的后缀名:比如:txt
注意:本程序使用Remove删除文件,所以删除的文件不会进回收站。
程序:https://files.cnblogs.com/IAmBetter/DeleteEverything.rar
源码:
#include <stdio.h> #include <direct.h> //_getcwd(), _chdir() #include <stdlib.h> //_MAX_PATH, system() #include <io.h> //_finddata_t, _findfirst(), _findnext(), _findclose() #include <string.h> #include <windows.h> //删除总数 int count = 0; //获取当前路径 void GetCurrentPath(void) { char buf[80]; getcwd(buf, sizeof(buf)); printf("current working directory : %s\n", buf); } //获取后缀名 char *substr(const char*str) { char *ptr, c = '.'; static char stbuf[256]; ptr = strrchr(str, c); //最后一个出现c的位置 if(ptr == NULL){ return stbuf; } int pos = ptr-str;//用指针相减 求得索引 unsigned start = pos + 1; unsigned end = strlen(str); unsigned n = end - start; strncpy(stbuf, str + start, n); stbuf[n] = 0; //字串最后加上0 return stbuf; } //递归查询文件并且删除 void findAllFile(char *pFilePath,char *extName) { WIN32_FIND_DATA FindFileData; DWORD dwError; HANDLE hFind = INVALID_HANDLE_VALUE; char DirSpec[MAX_PATH+1]; strncpy(DirSpec, pFilePath, strlen(pFilePath) + 1); SetCurrentDirectory(pFilePath); strncat(DirSpec, "\\*", 3); hFind = FindFirstFile(DirSpec, &FindFileData); if (hFind == INVALID_HANDLE_VALUE){ printf ("FileName:%s Invalid file handle. Error is %u\n", pFilePath,GetLastError()); return ; } else{ if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY ){ printf("FileName:%s\n", FindFileData.cFileName); } else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY&& strcmp(FindFileData.cFileName, ".") != 0&& strcmp(FindFileData.cFileName, "..") != 0){ char Dir[MAX_PATH + 1]; strcpy(Dir, pFilePath); strncat(Dir, "\\", 2); strcat(Dir, FindFileData.cFileName); findAllFile(Dir,extName); } while (FindNextFile(hFind, &FindFileData) != 0){ if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY){ _chdir( pFilePath ); char *extname2 = substr(FindFileData.cFileName); if(strcmp(extname2,extName) ==0){ printf ("\nFileName:%s ", FindFileData.cFileName); int result = remove(FindFileData.cFileName); if(result == 0) { printf("Delete Result:%d",result); count++; } else{ perror("remove"); } } } else if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && strcmp(FindFileData.cFileName, ".") != 0&& strcmp(FindFileData.cFileName, "..") != 0){ char Dir[MAX_PATH + 1]; strcpy(Dir, pFilePath); strncat(Dir, "\\", 2); strcat(Dir, FindFileData.cFileName); findAllFile(Dir,extName); } } dwError = GetLastError(); FindClose(hFind); if (dwError != ERROR_NO_MORE_FILES) { printf ("FindNextFile error. Error is %u\n", dwError); return; } } } //开始显示部分 void Show(char str[]) { int i,len; len = strlen(str); for(i=0;i<len;i++) { printf("%c",str[i]); sleep(100); } } int main(void) { printf("Anleb : "); sleep(1000); char string1[] = "I am Anleb,nice to somthing!\n"; Show(string1); printf("Anleb : "); sleep(1000); char string2[] = "Go,gay!\n"; Show(string2); printf("Please Enter the Path:"); char path[128]; gets(path); while(strlen(path) == 0) { printf("Warning:The Path value is Null!\n"); printf("Please Enter the Path:"); gets(path); } if(strcmp(path,"exit") ==0) return 0; printf("Please Enter the ExtName:"); char extName[10]; gets(extName); while(strlen(extName) == 0) { printf("Warning:The ExtName value is Null!\n"); printf("Please Enter the ExtName:"); gets(extName); } if(strcmp(extName,"exit") ==0) return 0; findAllFile(path,extName); printf("\nDelete Count: %d\n",count); system("pause"); return 0; }