VC下遍历文件夹中的所有文件的几种方法
2023-09-27 14:26:38 时间
一、使用::FindFirstFile和::FindNextFile方法 #include "StdAfx.h" #include <windows.h> #include <stdio.h> #include <string.h> #define LEN 1024 int FileCount = 0; // 深度优先递归遍历目录中所有的文件 BOOL DirectoryList(LPCSTR Path) { WIN32_FIND_DATA FindData; HANDLE hError; char FilePathName[LEN]; // 构造路径 char FullPathName[LEN]; strcpy(FilePathName, Path); strcat(FilePathName, "\\*.*"); hError = FindFirstFile(FilePathName, &FindData); if (hError == INVALID_HANDLE_VALUE) { printf("搜索失败!"); return 0; } while(::FindNextFile(hError, &FindData)) { // 过虑.和.. if (strcmp(FindData.cFileName, ".") == 0 || strcmp(FindData.cFileName, "..") == 0 ) { continue; } // 构造完整路径 wsprintf(FullPathName, "%s\\%s", Path,FindData.cFileName); FileCount++; // 输出本级的文件 printf("%s\n", FullPathName); if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { DirectoryList(FullPathName); } } return 0; } void main() { DirectoryList("F:\\123"); printf("共%d个文件\n",FileCount); } 二、利用CFileFind类较简洁的实现该功能 void CModelDlg::FindBmpFile(CString strFoldername) { CString m_cstrFileList=""; CFileFind tempFind; BOOL bFound; //判断是否成功找到文件 bFound=tempFind.FindFile(strFoldername + "\\*.*"); /修改" "内内容给限定查找文件类型 CString strTmp; //如果找到的是文件夹 存放文件夹路径 while(bFound) //遍历所有文件 { bFound=tempFind.FindNextFile(); //第一次执行FindNextFile是选择到第一个文件,以后执行为选择 //到下一个文件 if(!tempFind.IsDots()) continue; //如果找到的是返回上层的目录 则结束本次查找 if(tempFind.IsDirectory()) //找到的是文件夹,则遍历该文件夹下的文件 { strTmp=""; strTmp=tempFind.GetFilePath(); FindFile(strTmp); } else { strTmp=tempFind.GetFileName(); //保存文件名,包括后缀名 // 在此处添加对找到文件的处理 } } tempFind.Close(); return; } 三、使用IO.H中的_findfirst和_findnext方法 在IO.H、WCHAR.H中提供了_finddata_t, _wfinddata_t, _wfinddatai64_t 结构,通过_findfirst可以得到满足条件的第一个文件的句柄,如下: long _findfirst( char *filespec, struct _finddata_t *fileinfo ),然后你可以使用_findnext函数得到用_findfirst的句柄后的文件指针,如此就可以遍历所有满足条件的文件。其中_finddata_t 结构包括了文件的相关信息:文件名,创建日前等属性,你可以从你的机器中的IO.H文件中查找相应的定义。当然不要忘了,使用_findclose 函数关闭相应句柄 例如:下面程序实现把文件夹中的文件名字显示在窗口的标题栏中。 CString pathWild ="你的目录//*.jpg" ; struct _finddata_t c_file; long hFile; if( (hFile = _findfirst( LPCTSTR(pathWild), &c_file )) == -1L ) { ::AfxMessageBox("No image files in current directory!/n" ) ; } else {一、使用::FindFirstFile和::FindNextFile方法 find(char * lpPath) { char szFind[MAX_PATH]; WIN32_FIND_DATA FindFileData; strcpy(szFind,lpPath); strcat(szFind,"*.*"); HANDLE hFind=::FindFirstFile(szFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return; while(TRUE) { if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if(FindFileData.cFileName[0]!='.') { strcpy(szFile,lpPath); strcat(szFile,""); strcat(szFile,FindFileData.cFileName); find(szFile); } } else { cout << FindFileData.cFileName; } if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind); } 二、利用CFileFind类较简洁的实现该功能 void CModelDlg::FindBmpFile(CString strFoldername) { CString m_cstrFileList=""; CFileFind tempFind; BOOL bFound; //判断是否成功找到文件 bFound=tempFind.FindFile(strFoldername + "\\*.*"); /修改" "内内容给限定查找文件类型 CString strTmp; //如果找到的是文件夹 存放文件夹路径 while(bFound) //遍历所有文件 { bFound=tempFind.FindNextFile(); //第一次执行FindNextFile是选择到第一个文件,以后执行为选择 //到下一个文件 if(!tempFind.IsDots()) continue; //如果找到的是返回上层的目录 则结束本次查找 if(tempFind.IsDirectory()) //找到的是文件夹,则遍历该文件夹下的文件 { strTmp=""; strTmp=tempFind.GetFilePath(); FindFile(strTmp); } else { strTmp=tempFind.GetFileName(); //保存文件名,包括后缀名 // 在此处添加对找到文件的处理 } } tempFind.Close(); return; } 三、使用IO.H中的_findfirst和_findnext方法 在IO.H、WCHAR.H中提供了_finddata_t, _wfinddata_t, _wfinddatai64_t 结构,通过_findfirst可以得到满足条件的第一个文件的句柄,如下: long _findfirst( char *filespec, struct _finddata_t *fileinfo ),然后你可以使用_findnext函数得到用_findfirst的句柄后的文件指针,如此就可以遍历所有满足条件的文件。其中_finddata_t 结构包括了文件的相关信息:文件名,创建日前等属性,你可以从你的机器中的IO.H文件中查找相应的定义。当然不要忘了,使用_findclose 函数关闭相应句柄 例如:下面程序实现把文件夹中的文件名字显示在窗口的标题栏中。 CString pathWild ="你的目录//*.jpg" ; struct _finddata_t c_file; long hFile; if( (hFile = _findfirst( LPCTSTR(pathWild), &c_file )) == -1L ) { ::AfxMessageBox("No image files in current directory!/n" ) ; } else { do { AfxGetMainWnd()->SetWindowText(c_file.name); } while (_findnext(hFile, &c_file) == 0); } _findclose(hFile); 对了,别忘了在你的工程中包括头文件IO.H do { AfxGetMainWnd()->SetWindowText(c_file.name); } while (_findnext(hFile, &c_file) == 0); } _findclose(hFile); 对了,别忘了在你的工程中包括头文件IO.H
jpg改rar
![](https://images2018.cnblogs.com/blog/923483/201807/923483-20180731190605491-104485134.jpg)
相关文章
- Spring Boot 2.4 示例创建 POM 文件
- Python常用函数:glob.glob():返回所有匹配的文件路径列表、glob.iglob():获取一个可遍历生成器,使用它可以迭代获取匹配的文件路径名
- EasyRecovery全新版本文件数据恢复软件功能下载介绍
- [SAP ABAP开发技术总结]以二进制、字符模式下载文件
- Mac 复制,剪切文件
- 【OpenCV】—输入输出XML和YAML文件
- 第17周项目6 阅读文件,多文件
- PHP遍历文件夹下所有文件
- Python-循环遍历文件
- Mac电脑:如何快速复制文件或文件夹的路径
- linux中查找某个目录或文件的位置 find
- Android基于http协议多文件上传
- Linux应用编程之多次打开同一个文件
- qt之遍历文件中的图片,回放
- /etc/rc.d/里文件的作用
- c#文件读取和写入的方式总结