《改编》遍历某文件夹并删除一定后缀的文件——@soil@1

因为一定的原因,需要编写一个自己的程序来实现标题的功能。

在这个程序中需要完成的很少。并且删除的文件后缀只有:{"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);
		}
}

但是有些文件却删不掉,给出的错误报告是:“Invalid argument”, 译为:参数非法,也就是参数不对。
然后这些删除不掉的文件中有一些特殊的符号,比如爱心,


你可能感兴趣的:(《改编》遍历某文件夹并删除一定后缀的文件——@soil@1)