vc 遍历目录下的文件与总数
来源:互联网 发布:淘宝素材图片 编辑:程序博客网 时间:2024/05/17 03:13
使用::FindFirstFile和::FindNextFile方法#include "StdAfx.h"#include <windows.h>#include <stdio.h>#include <string.h>#define LEN 1024int 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
阅读全文
0 0
- vc 遍历目录下的文件与总数
- VC 遍历指定目录下的文件
- 用VC++遍历某一目录下的所有文件
- VC++遍历指定目录下的所有文件
- 遍历目录下所有文件(VC)
- Linux系统统计目录下的文件总数
- 遍历目录下的文件
- 遍历目录下的文件
- 遍历目录下的文件
- 遍历目录,获取目录下的文件
- liunx获取当前目录下的文件和目录的总数
- 如何使用VC++遍历某一个目录下的全部文件呢?
- vc遍历文件夹下的所有文件
- 遍历目录下的所有文件
- [积累]遍历目录下的全部文件
- MFC 遍历目录下的文件
- java 遍历目录下的文件
- 遍历一个目录下的所有文件
- 第三个春天
- 操作系统实验——内存管理
- L1-030. 一帮一
- C语言基础(一)
- 从零开始搞懂Android网络请求——JSON数据的解析与Gson框架的使用
- vc 遍历目录下的文件与总数
- leetcode题解-344. Reverse String && 541. Reverse String II && 345. Reverse Vowels of a String
- NOIP2017翻车记
- javascript匿名函数传值问题
- LinearLayout布局中控件居中显示
- react-native设置scrollView水平垂直居中
- 电商SKU选择优化维度-倒排索引(搜索引擎原理)
- 电蚊拍一天用30-50次?
- 【Python编程:入门到实践】第七章:用户输入和while循环