如何c语言遍历文件夹

#include <windows.h>

/************************************************/
*参数说明:
	char *pszDestPath为需要遍历的目标路径
/************************************************/

EnmuDirectory(char *pszDestPath)
{
	//此结构说明参MSDN
	WIN32_FIND_DATA FindFileData;
	//查找文件的句柄
	HANDLE hListFile;
	//绝对路径,例:c:\windows\system32\cmd.exe
	char szFullPath[MAX_PATH];
	//相对路径
	char szFilePath[MAX_PATH];
	//构造相对路径
	wsprintf(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;
			}
			//构造全路径
			wsprintf(szFullPath, "%s\\%s", pszDestPath, FindFileData.cFileName);
			//读取文件属性,如果不是文件夹
			if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
			{
				//这里你可以自己添加分析是某种类型文件的代码。可以根据
				//扩展名分析。

				//这里有个实例,你可以看看

				//有必要初始化一下
				char *pszFileType = NULL;
				//把pszFileType指向cFileName的倒数第三个数符。因为一般扩展名长为3个字符。
				//当然,你也可以用其它方法分析扩展名。或倒序查“.”
				pszFileType = &(FindFileData.cFileName[strlen(FindFileData.cFileName) - 3]);
				//如果是jpg结尾的文件
				if(!stricmp(pszFileType, "jpg"))
				{
					FILE *fp;
					//或许这里打开C:\\data.txt不应该用"w+",你可试着来
					fp = fopen("c:\\data.txt", "w+");
					if(fp) fputs(szFullPath, fp);
					fclose(fp);
				}

			}
			
			//如果是文件夹,则递归调用EnmuDirectory函数
			if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				EnmuDirectory(szFullPath);
			}
		//循环,查找下一个文件
		}while(FindNextFile(hListFile, &FindFileData));
	}
	//关闭句柄
	FindClose(hListFile);
	//清空结构。可有可无的一句代码。函数退出会自动清空。
	ZeroMemory(&FindFileData, sizeof(FindFileData));
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值