标签:实现 val \n cto oid rtm clear close 遍历
一、使用::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
标签:实现 val \n cto oid rtm clear close 遍历
原文地址:https://www.cnblogs.com/kuangke/p/9397708.html