转自:http://blog.csdn.net/lizhigang770/archive/2010/11/30/6045242.aspx

一、先介绍一个结构 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 ]; // 文件的可选名

  } WIN32_FIND_DATA;

可以通过 FindFirstFile ()函数,根据文件路径把待操作文件的相关属性读取到 WIN32_FIND_DATA 结构中去:

四、下面是遍历代码

#include<windows.h>
#include<iostream>
#include<string>
using namespace std;

//只能处理目录:lpPath只能是路径
void find(char *lpPath)
{
    char szFind[MAX_PATH];
   char szFile[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<<endl;
        }
        if(!FindNextFile(hFind,&FindFileData))
            break;
    }
    FindClose(hFind);
}
//可同时处理目录和文件:path可以是路径,也可以是文件名,或者文件通配符
void _find(string path)
{
     //取路径名最后一个"//"之前的部分,包括"//"
    string prefix=path.substr(0,path.find_last_of('//')+1);

WIN32_FIND_DATA FindFileData;
    HANDLE hFind=::FindFirstFile(path.c_str(),&FindFileData);
    if(INVALID_HANDLE_VALUE == hFind)
    {
       cout<<"文件通配符错误"<<endl;
      return;
   }
    while(TRUE)
    {
      //目录
        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            //不是当前目录,也不是父目录
            if(FindFileData.cFileName[0]!='.')
            {
                //查找下一级目录
                _find(prefix+FindFileData.cFileName+'//'+"*.*");
            }
        }
        //文件
        else
        {  
             cout<<FindFileData.cFileName<<endl;
        }
        if(!FindNextFile(hFind,&FindFileData))
              break;
    }
    FindClose(hFind);
}

void main()
{
     find("E:");//目录:E盘
     _find("E://*.*");//E盘下所有文件

string str=".//";
      string path;
      cout<<"请输入文件通配符:"<<flush;
      cin>>path;
      str=str+path;
      find((char*)str.c_str());//可以处理".",".." 不可以处理"*","..//*"
      _find(str);//可以处理"*","..//*" 不可以处理".",".."
}

WIN32_FIND_DATA ffd;

HANDLE hFind = FindFirstFile("c://test.dat",&ffd);

二、函数 FindFirstFile

1 、声明 : HANDLE FindFirstFile(LPCTSTR lpFileName,LPWIN32_FIND_DATA lpFindFileData);

2 、参数 :

lpFileName String ,欲搜索的文件名。可包含通配符,并可包含一个路径或相对路径名
lpFindFileData WIN32_FIND_DATA ,一个 WIN32_FIND_DATA 指针, 用于装载与找到的文件有关的信息,该结构可用于后续的搜索

3 、返回值 :

如执行成功,返回一个搜索句柄。如果出错,返回一个 INVALID_HANDLE_VALUE 常数,一旦不再需要,应该用 FindClose 函数关闭这个句柄

4 、功能

读取文件信息到一个 WIN32_FIND_DATA 结构中,返回这个文件的句柄

5 、注释:

由这个函数返回的句柄可以作为一个参数用于 FindNextFile 函数。这样一来,就可以方便的枚举出与 lpFileName 参数指定的文件名相符的所有文件(是指文件名含有通配符)

三、函数 FindNextFile

1 、声明 BOOL FindNextFile(HANDLE hFindFile, LPWIN32_FIND_DATA lpFindFileData);

2 、参数 :

HANDLE hFindFile 搜索的文件句柄,函数执行的时候搜索的是此句柄的下一文件

LPWIN32_FIND_DATA lpFindFileData 一个 WIN32_FIND_DATA 指针,

3 、返回值 :

如果调用成功返回一个非 0 值;调用失败,返回为 0 ,可调用 GetLastError 来获取错误信息

4 、功能

继续查找 FindFirstFile 函数搜索后的文件

5 、注释:

这个函数可以连续调用,以方便的枚举出与 lpFileName 参数指定的文件名相符的所有文件

其它参考文献:http://www.cnblogs.com/summerRQ/articles/2375749.html

WIN32 C++ 遍历文件夹相关推荐

  1. ASP.NET2.0 遍历文件夹下所有图片【月儿原创】

    ASP.NET2.0 遍历文件夹下所有图片 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.4 1.以下目录有若干图片(都是 ...

  2. OpenCV实现遍历文件夹下所有文件

    OpenCV中有实现遍历文件夹下所有文件的类Directory,它里面包括3个成员函数:(1).GetListFiles:遍历指定文件夹下的所有文件,不包括指定文件夹内的文件夹:(2).GetList ...

  3. Linux下遍历文件夹的实现

    转自:http://blog.csdn.net/wallwind/article/details/7528474 linux C 遍历目录及其子目录 #include <stdio.h> ...

  4. python根据文件名或后缀名遍历文件夹下所有文件或图片的路径,并计算文件行数

    python遍历文件夹下所有文件或图片的路径 代码 指定目录下的指定后缀文件 import glob #获取指定目录下的所有图片 print (glob.glob("\\home\\qiao ...

  5. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append

    1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...

  6. linux遍历文件夹下所有文件大小,Linux系统遍历文件夹 获取文件大小的操作(C语言实现)...

    /** linux 下遍历文件夹以及获取文件大小 */ #include #include #include #include /** 获取文件大小,但是文件大小不能超过2G ,该方法不推荐使用 */ ...

  7. python遍历文件夹下所有文件大小_python遍历文件夹读取文件大小 | 学步园

    闲来无事,写了个小程序删除内存卡中大于50m的文件 # filename  itertaorfilefolder import os import os.path filePath = raw_inp ...

  8. Delphi下遍历文件夹下所有文件的递归算法

    {------------------------------------------------------------------------------- 过程名:    MakeFileLis ...

  9. python批量删除文件1001python批量删除文件_Python实现递归遍历文件夹并删除文件...

    思路: 遍历文件夹下面的文件夹 如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文件都是只读的,你不能直接删除) 删除此文件夹 如果文件夹 ...

最新文章

  1. 你能分清多进程与多线程吗?
  2. java 自定义类加载器_Java-JVM 自定义类加载器
  3. Pipe HDU - 2150(判断线段相交+向量叉乘线代详解)
  4. [CodeJam 2019 Round 3] Rancake Pyramid(笛卡尔树)
  5. dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》
  6. 基于Java+SpringBoot+vue+element实现校园闲置物品交易网站
  7. Spring JDBC和JdbcTemplate CRUD与DataSource示例
  8. 红橙Darren视频笔记 模板模式的应用与BaseActivity
  9. influx 操作_InfluxDB学习之InfluxDB的基本操作-阿里云开发者社区
  10. (14) ZYNQ AXI4-Lite总线简介(学无止境)
  11. RemoteDebug iOS Webkit Adapter(适配器):一个可以让你(随时)随地调试Safari、 iOS WebView(的适配器)
  12. 系统自带不起眼但很强杀毒工具
  13. Win系统 - 如何解决 Windows + P 键无法切换双显复制模式?
  14. 网易云音乐产品体验报告
  15. 位置不可用无法访问介质受写入保护 chkdsk无法修复. 不知道怎样找到呢?
  16. 杭州电子科技大学acm--2011
  17. 解决win11/win10无法安全拔出移动硬盘的问题 - U盘无法“安全删除并弹出媒体”
  18. Tableau:树状图
  19. linux脚本date命令,Shell之date命令用法
  20. 解决超微主板双卡显示器不亮问题

热门文章

  1. 训练LaneATT遇到CUDA_HOME环境变量问题
  2. 深度学习--TensorFlow (1)单层感知器1 -- 实现单数据训练
  3. 【seaborn】(1) 数据可视化,绘图风格、布局
  4. 吴恩达神经网络和深度学习——第三周笔记
  5. 舒工给您娓娓道来:2019-nCoV,教室布局筛查追溯系统算法解密!
  6. Windows DOS窗口查看历史执行过的命令的三种方式
  7. 在ubuntu 14.04 64bit上安装酷我音乐盒Linux客户端kwplayer
  8. 读书:有趣 -- 酒鬼与圣徒
  9. Contos7 克隆实例 以及 配置网络-服务-等相关信息
  10. JSP和Servlet学习笔记1 - 访问配置