VC中遍历文件夹下的文档及子文件夹
WIN32_FIND_DATA
结构体:
typedef struct _WIN32_FIND_DATA
{
DWORD dwFileAttributes; //文件属性
FILETIME ftCreationTime; // 文件创建时间
FILETIME ftLastAccessTime; // 文件最后一次访问时间
FILETIME ftLastWriteTime; // 文件最后一次修改时间
DWORD nFileSizeHigh; // 文件长度高32位
DWORD nFileSizeLow; // 文件长度低32位
DWORD dwReserved0; // 系统保留
DWORD dwReserved1; // 系统保留
TCHAR cFileName[ MAX_PATH ]; // 长文件名
TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
} WIN32_FIND_DATA;
使用方法:
bool find(char * lpPath)
{
printf("******************查找文件开始*************************\n");
char szFile[100];
char szFind[MAX_PATH];
//WIN32_FIND_DATA结构描述了一个由FindFirstFile,
//FindFirstFileEx, 或FindNextFile函数查找到的文件信息
WIN32_FIND_DATA FindFileData;
memset(szFile,0,100); //为新申请的内存做初始化工作
strcpy(szFind,lpPath); //将lpPath的值拷贝给szFind
strcat(szFind,"//*.*"); //联接构成完整路径名,双斜杠//用于组成下一级路径
//通过FindFirstFile()函数根据当前的文件存放路径
//查找该文件来把待操作文件的相关属性读取到WIN32_FIND_DATA结构中去
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
{
return 0; //如果hFind的句柄值无效,返回0
}
while(TRUE)
{
//将dwFileAttributes和FILE_ATTRIBUTE_DIRECTORY做位"与"运算来判断所找到的项目是不是文件夹,
//这段程序的目的是查找文件夹下子文件夹中的内容
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(FindFileData.cFileName[0]!='.')
{
strcpy(szFile,lpPath);
strcat(szFile,"//");
strcat(szFile,FindFileData.cFileName);
find(szFile);
}
}
else
{
printf("filename:%s\n",FindFileData.cFileName);
printf("nFileSizeLow:%d\n",FindFileData.nFileSizeLow);
}
if(!FindNextFile(hFind,&FindFileData))
break;//如果没有找到下一个文件,结束本次循环
}
FindClose(hFind);
printf("******************查找文件结束*************************\n");
return 1;
}