VC下遍历文件夹中的所有文件的几种方法
一、使用::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

VC下遍历文件夹中的所有文件的几种方法的更多相关文章
- PHP遍历、删除文件夹中的所有文件
<?php header("Content-type:text/html;charset=utf-8"); /** * getDirFile 遍历文件夹中的所有文件 * @p ...
- C#遍历指定文件夹中的所有文件(转)
原文链接:http://www.cnblogs.com/qianqianfy/archive/2009/07/08/1518974.html 1. C#遍历指定文件夹中的所有文件 DirectoryI ...
- C#遍历指定文件夹中的所有文件(转)
C#遍历指定文件夹中的所有文件 DirectoryInfo TheFolder=new DirectoryInfo(folderFullName);//遍历文件夹foreach(DirectoryIn ...
- php遍历文件夹中所有的文件
遍历文件夹中的所有文件 思路:1.定义一个函数,把给定的文件夹当前目录遍历输出(用到的文件操作函数scandir():一次性读取当前文件夹所有的内容并以数组的形式返回.). 2.如果是文件夹则红色字体 ...
- [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。
解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...
- C++读取文件夹中所有的文件或者是特定后缀的文件
由于经常有读取一个文件夹中的很多随机编号的文件,很多时候需要读取某些特定格式的所有文件. 下面的代码可以读取指定文件家中的所有文件和文件夹中格式为jpg的文件 参考: http://www.2cto. ...
- 基于Python——实现解压文件夹中的.zip文件
[背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...
- python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件
python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...
- Java以流的方式将指定文件夹里的.txt文件全部复制到另一文件夹,并删除原文件夹中所有.txt文件
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- C# 读取指定文件夹中的全部文件,并按规则生成SQL语句!
本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using System.IO; namespace ToSql{ cla ...
随机推荐
- C# 初学
突然对C#充满了兴趣,于是兴致勃勃的折腾起来. 下面是折腾的过程: IDE,我选择了vs2017,不过这货的安装选项略多,对于新手来说各种坑.无论如何,选择”.NET桌面开发”即可,其他的全部留空. ...
- vi 新建文件后保存文件时遇到的问题:E212: 无法打开并写入文件
问题描述 使用vi编辑器写好内容后保存并退出时遇到以下问题 解决方案 该问题的原因是用户权限不够,因为普通用户用 vi 不能保存文件,需要使用超级用户才可以. 先转换为超级用户:su 再用vi打开文件 ...
- C语言中的运算和运算符
一.运算符的优先级和结合性 1,优先级 运算符一览表中,运算符越靠上,优先级越高. 2,结合性 假如用O表示需要两个操作数的双目运算符,那么对于表达式aObOc: 左结合运算符会将表达式解释为 (a ...
- 批量kill 进程
场景: 需要批量kill tail 进程. 解决方法: ps -ef | grep IC.IndexServer.log | grep -v grep | awk -F' ' '{print $2}' ...
- 性能优化系列四:Tomcat优化
一.Tomcat工作原理 1. TCP的三次握手四次挥手 三次握手: 说明: 类比于A和B打电话: A对B说:你好,我是A,你能听到我说话吗? B对A说:嗯,我能听到你说话 A对B说:好,那我们开始聊 ...
- 发现eclipse红叉,查看markers发现Target runtime Apache Tomcat 6.0 is not defined
1.导入以前的项目(Markers中注意查看,就在console选项卡旁边),报以下错误,但不影响操作: Description Resource Path Location TypeTarget r ...
- Unity5-----------之GI设置简介
GI global illumination 全局照明indirect illumination 间接照明模拟出光线追踪的效果 实现方法:1.ssao系列 2.lightmap.辐射度3.PBRT 实 ...
- (转)Ubuntu12.04上NFS Server安装使用过程
原文链接:Ubuntu12.04上NFS Server安装使用过程 实现步骤: 1.服务器端:sudo apt-get install portmap2.服务器端:sudo apt-get insta ...
- [深入理解Android卷一全文-第三章]深入理解init
因为<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- Oracle EM错误,java.lang.Exception: Exception in sending Request :: null 分类: Oracle 2015-07-08 21:24 44人阅读 评论(0) 收藏
操作系统:Win7 64bit Oracle: 10.2.0.1.0 很久没有使用EM了,打开一看,居然报错了,出现java.lang.Exception: Exception in sending ...