因为一定的原因,需要编写一个自己的程序来实现标题的功能。
在这个程序中需要完成的很少。并且删除的文件后缀只有:{"url", "txt", "jpg", "gif", "chm", "mht", "rar", "png", "zip"};
并且没有别的特殊文件(如果有的话在下次更新中说)。
WIN32_FIND_DATA findData;
HANDLE hFindFile;
hFindFile = FindFirstFile(szFileName, &findData))
上述代码来获得文件的信息,这个在网上百度一下就能找到。
在遍历文件夹这个函数上,主要用到了句柄来获得文件信息:
int EnmuDirectory(char *pszDestPath){
WIN32_FIND_DATA FindFileData; //此结构说明参MSDN;
HANDLE hListFile; //查找文件的句柄;
char szFullPath[MAX_PATH];//绝对路径,例:c:\windows\system32\cmd.exe;
char szFilePath[MAX_PATH]; //相对路径;
sprintf(szFilePath, "%s\\*", pszDestPath); //构造相对路径;
//查找第一个文件,获得查找句柄,如果FindFirstFile返回INVALID_HANDLE_VALUE则返回;
if((hListFile = FindFirstFile(szFilePath, &FindFileData)) == INVALID_HANDLE_VALUE){
//查找文件错误;
return 1;
}else{
do {
//过滤.和..;
//“.”代表本级目录“..”代表父级目录;
if( lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 ||
lstrcmp(FindFileData.cFileName, TEXT("..")) == 0 ){
continue;
}
sprintf(szFullPath, "%s\\%s", pszDestPath, FindFileData.cFileName);
//构造全路径;
//读取文件属性,如果不是文件夹;
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){
char *pszFileType = NULL;
printf("%s\n",FindFileData.cFileName);
}
//如果是文件夹,则递归调用EnmuDirectory函数;
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
EnmuDirectory(szFullPath);
}
}while(FindNextFile(hListFile, &FindFileData)); //循环,查找下一个文件;
}
//关闭句柄;
FindClose(hListFile);
return 0;
}
//“.”代表本级目录“..”代表父级目录;
if( lstrcmp(FindFileData.cFileName, TEXT(".")) == 0 ||
lstrcmp(FindFileData.cFileName, TEXT("..")) == 0 ){
continue;
}
修改后:
if(findData.cFileName[0] == '.')
continue;
算是节省了一点代码,但是暂时不知道两种方式那个更好。
最后是删除文件的代码:
void needDelete(char *path, char *fileName){
char t[9][4] = {"url", "txt", "jpg", "gif", "chm", "mht", "rar", "png", "zip"};
int len;
char p[4] = {0};
int i;
char deleteFileName[1000] = {0};
len = strlen(fileName);
for(i = 0; i < 3; i++)
p[i] = fileName[len+i-3];
for(i = 0; i < 9; i++)
if(!strcmp(p, t[i])){//需要删除文件
sprintf(deleteFileName, "%s\\%s", path, fileName);
if(!remove(deleteFileName))
printf("delete one file--->>%s\n", deleteFileName);
else
printf("删除文件失败error:%s----%s\n", strerror(errno), deleteFileName);
}
}
然后这些删除不掉的文件中有一些特殊的符号,比如爱心,