/************************************************/
*参数说明:
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
C是一个通用的计算机编程语言创建的丹尼斯·里奇在1972年贝尔实验室。它是一种程序性和低级语言,提供对系统内存的访问。C是一个成千上万的计算机编程语言用来创建列表的指令。今天仍然非常广泛使用和影响力。有许多资源网上学习C语言,比如learn-c.org提供了一个免费互动教程。使用dir.h库的两个函数即可:findfirst和findnext。首先调用findfirst函数查找是否有满足条件的某目录文件,如果返回值非0则表示找不到返回。
如果findfirst返回值为0,则循环调用findnext函数,根据返回值,如果为0,结束循环,遍历结束。否则循环调用findnext即可遍历,直到返回非0值即可。
当然,这两个函数需要定义一个结构体来存储函数返回的数据。结构体如下:
struct
ffblk
{
char
ff_reserved[21]
/*DOS保留字*/
char
ff_attrib
/*文件属性*/
int
ff_ftime
/*文件时间*/
int
ff_fdate
/*文件日期*/
long
ff_fsize
/*文件长度*/
char
ff_name[13]
/*文件名*/
}
将结构体中的ff_name[13]显示出来即可。