请我如何c语言遍历文件夹
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请我如何c语言遍历文件夹相关的知识,希望对你有一定的参考价值。
输入:文件夹路径,如:D:\MATLAB\R2010a\work;
输出:将遍历该文件夹下(包括子文件夹)所有图像文件(.jpg;.bmp;.gif;.png;格式文件)后得到的所有图像文件路径写入一.txt文件(此TXT文件并不要求作为输入,固定为程序文件夹下一TXT文件即可);
最好程序有注释,谢谢
/************************************************/
*参数说明:
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;
这是windows api版的,还有MFC版的和C版的。要的话来找我Q:503267714 参考技术A 现成的没有,给你参考下:
c++:
1、CFileFind类实现遍历文件,FindNext()查找下一个文件
2、比较文件后缀,符合要求就写入txt
有不懂得话加Q:2311776177! 参考技术B 二楼真有耐心
c语言如何遍历枚举元素
可不可以用数组来遍历枚举元素,例如一个我想枚举的范围是0-999之间的任何数,该怎么样写呢
用for循环:for(i=1;i<=999;i++)
/*对数组a[i]进行处理*/}
当然也可以用while或do…while语句。 参考技术A for(i=1;i<=999;i++)
以上是关于请我如何c语言遍历文件夹的主要内容,如果未能解决你的问题,请参考以下文章
C语言:如何遍历指定的文件夹(可以包括子文件夹)中的每一个文件名