在此之前需要了解 WIN32_FIND_DATA的结构 以及  FindFirstFile、 FindNextFile原型以及用法注意事项传送门如下

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365740(v=vs.85).aspx

涉及的宏定义

------------------------------------------------------------------------------------------------------------------------------------------------

  • FILE_ATTRIBUTE_ARCHIVE
    32 (0x20)
A file or directory that is an archive file or directory. Applications typically use this attribute to markfiles for backup or removal.存档类
  • FILE_ATTRIBUTE_COMPRESSED
    2048 (0x800)
A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.
  • FILE_ATTRIBUTE_DEVICE
    64 (0x40)
This value is reserved for system use.驱动类
  • FILE_ATTRIBUTE_DIRECTORY
    16 (0x10)
The handle that identifies a directory.目录类
  • FILE_ATTRIBUTE_ENCRYPTED
    16384 (0x4000)
A file or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories.
  • FILE_ATTRIBUTE_HIDDEN
    2 (0x2)
The file or directory is hidden. It is not included in an ordinary directory listing.隐藏
  • FILE_ATTRIBUTE_INTEGRITY_STREAM
    32768 (0x8000)
The directory or user data stream is configured with integrity (only supported on ReFS volumes). It is not included in an ordinary directory listing. The integrity setting persists with the file if it's renamed. If a file is copied the destination file will have integrity set if either the source file or destination directory have integrity set.
Windows Server2008R2, Windows7, Windows Server2008, WindowsVista, Windows Server2003, and WindowsXP:This flag is not supported until Windows Server2012.
  • FILE_ATTRIBUTE_NORMAL
    128 (0x80)
A file that does not have other attributes set. This attribute is valid only when used alone.普通
  • FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
    8192 (0x2000)
The file or directory is not to be indexed by the content indexing service.
  • FILE_ATTRIBUTE_NO_SCRUB_DATA
    131072 (0x20000)
The user data stream not to be read by the background data integrity scanner (AKA scrubber). When set on a directory it only provides inheritance. This flag is only supported on Storage Spaces and ReFS volumes. It is not included in an ordinary directory listing.
Windows Server2008R2, Windows7, Windows Server2008, WindowsVista, Windows Server2003, and WindowsXP:This flag is not supported until Windows8 and Windows Server2012.
  • FILE_ATTRIBUTE_OFFLINE
    4096 (0x1000)
The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute.
  • FILE_ATTRIBUTE_READONLY
    1 (0x1)
A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, in Windows Vista or in Windows 7.
  • FILE_ATTRIBUTE_REPARSE_POINT
    1024 (0x400)
A file or directory that has an associated reparse point, or a file that is a symbolic link.
  • FILE_ATTRIBUTE_SPARSE_FILE
    512 (0x200)
A file that is a sparse file.
  • FILE_ATTRIBUTE_SYSTEM
    4 (0x4)
A file or directory that the operating system uses a part of, or uses exclusively.系统文件
  • FILE_ATTRIBUTE_TEMPORARY
    256 (0x100)
A file that is being used for temporary storage. File systems avoid writing data back to mass storage ifsufficient cache memory is available, because typically, an application deletes a temporary file after the handleis closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written afterthe handle is closed.临时文件
  • FILE_ATTRIBUTE_VIRTUAL
    65536 (0x10000)
This value is reserved for system use.虚拟文件(系

出自:https://baike.baidu.com/item/WIN32_FIND_DATA

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我的理解上述宏定义:

●FILE_ATTRIBUTE_ARCHIVE——文件包含归档属性。
●FILE_ATTRIBUTE_COMPRESSED——文件和目录被压缩。
●FILE_ATTRIBUTE_DIRECTORY——找到的是一个目录。
●FILE_ATTRIBUTE_HIDDEN——文件包含隐含属性。
●FILE_ATTRIBUTE_NORMAL——文件没有其他属性。
●FILE_ATTRIBUTE_READONLY——文件包含只读属性。
●FILE_ATTRIBUTE_SYSTEM——文件包含系统属性。
●FILE_ATTRIBUTE_TEMPORARY——文件是一个临时文件
 
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, *PWIN32_FIND_DATA;
 
HANDLE FindFirstFile(
    LPCTSTR lpFileName,//filename
    LPWIN32_FIND_DATA lpFindFileData//databuffer
);

参数说明

LPCTSTR lpFileName文件名(包括路径)
LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体

返回值

如果调用成功返回一个句柄,可用来做为FindNextFile或 FindClose参数
调用失败 返回为INVALID_HANDLE_VALUE(即-1) ,可调用GetLastError来获取错误信息
 
BOOL FindNextFile(
HANDLE hFindFile, //searchhandle
LPWIN32_FIND_DATA lpFindFileData //databuffer
);

参数说明

HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件
LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体
 

返回值

非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES
 
上述参数解析来源百度百科,然后准备工作已备好,那么以下是实例,比较简单,没有改成通用的,修改并不难若有疑问/错误望大神提出:
header files:

#include <stdio.h>
#include <string>

#define ParaPath "path"

source files:

#include "loadfileDemo.h"
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <IO.h>

//缓存大小

#define LEN 1024

//给定路径查询该目录下所有文件,并输出文件名跟路径
bool find(char * lpPath)
{
  char findPath[LEN];  
  WIN32_FIND_DATA FindFileData; //首先了解 WIN32_FIND_DATA结构
  strcpy(findPath,lpPath);
  strcat(findPath,"*.*");  

  HANDLE hFind=::FindFirstFile(findPath,&FindFileData);// 路径,查找缓冲区为形参
  if(INVALID_HANDLE_VALUE == hFind) //查找失败 宏定义为无效值 0xFFFFFFFF 即-1
  return false;

  while(TRUE)
  {
    if(FindFileData.dwFileAttributes && FILE_ATTRIBUTE_DIRECTORY) //判断是否是文件
  {
      if(FindFileData.cFileName[0]!='.')//排除根目录\.. \.
    {
      strcpy(findPath,lpPath);
      strcat(findPath,FindFileData.cFileName);
      printf("findPath:%s\n",findPath);
      printf("FileData:%s\n",FindFileData.cFileName);
    }
      if(!FindNextFile(hFind,&FindFileData)) //目录不为空指针往后移动
        break;
    }
  }
    FindClose(hFind);
    return true;
}

int main(void)
{
    char *str = ParaPath;

     if(find(str)) //传入需要查找的路径
      {
        printf("success!\n");
        }
     else
      {
        printf("fail!\n");
      }
      return 0;
}

注意:限定windows下使用,接口为windows提供的,若要跨平台可考虑Qt/C++

C 给定路径遍历目录下的所有文件的更多相关文章

  1. C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)

    本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6815924.html. 前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文 ...

  2. C/C++遍历目录下的所有文件(Windows篇,超详细)

    注: 1. 本文讨论的是怎么用Windows API遍历目录下的所有文件.除Windows API,还有一种Windows/Linux通用的方式,使用<io.h>. 2. 本文部分翻译自M ...

  3. windows 遍历目录下的所有文件 FindFirstFile FindNextFile

    Windows下遍历文件时用到的就是FindFirstFile 和FindNextFile 首先看一下定义: HANDLE FindFirstFile( LPCTSTR lpFileName, // ...

  4. php 遍历目录下的所以文件和文件夹

    <?php/** * 遍历文件夹和文件列 * @author lizhiming * @date 2016/06/30 */define('DS', DIRECTORY_SEPARATOR); ...

  5. 遍历目录下的所有文件-os.walk

    #coding:utf-8 import os for root,dirs,files in os.walk("D:"): for fileItem in files: print ...

  6. shell 遍历目录下的所有文件

    dir=/usr/local/nginx/logs for file in $dir/*; do echo $file done //结果 ./test.sh /usr/local/nginx/log ...

  7. shell编程--遍历目录下的文件

    假定目录text下有如下文件      目录:dir_1.dir_2.dir_3 文件:text_1.text_2 遍历目录下所有的文件是目录还是文件 if -- if类型: #!bin/sh for ...

  8. 复制D:\\day05目录下的所有文件到D:\\copy,并将.txt文件改为.java文件。

    **解题思路: 1.首先定义一个静态的refile方法,参数传入两个文件路径 2.要复制目录下的所有文件,首先查询File类的方法,可以使用listFiles方法得到目录下的文件 3.想到这问题基本就 ...

  9. Java遍历一个目录下的所有文件

    Java遍历一个目录下的所有文件   Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其他流类不同的是,流类关心的是文件的内容,而File类关心的是磁盘上文件的存 ...

随机推荐

  1. python基础:7.求结果

    求结果: v1 = 1 or 3
 v2 = 1 and 3
 v3 = 0 and 2 and 1 v4 = 0 and 2 or 1 v5 = 0 and 2 or 1 or 4 v6 = 0 o ...

  2. Autodesk Maya 2019 for Mac(三维动画软件)最新功能介绍

    Autodesk Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等.Maya功能完善,工作灵活,易学易用,制作效率极高,渲染真实感极强,是 ...

  3. ASIO

    { 编译ASIO库时,出现编译警告, "Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:\n& ...

  4. 【Linux】grub引导修复

    将系统盘挂载上并设置开机从光盘启动(U盘也可以) 进入系统安装引导初始界面,然后选择最后一项Troubleshooting 然后选择第二项Rescue a CentOS system进入系统救援模式选 ...

  5. HihoCoder 1055 刷油漆 (树上背包)

    题目:https://vjudge.net/contest/323605#problem/A 题意:一棵树,让你选择m个点的一个连通块,使得得到的权值最大 思路:树上背包,我们用一个dp数组,dp[i ...

  6. CSS定位,转载的

    转自:http://www.cnblogs.com/jiqing9006/archive/2012/07/26/2610586.html 层级关系为:<div ——————————— posit ...

  7. HTMLTestRunner优化:带截图、饼图、失败重跑

    github地址:https://github.com/yoyoketang/sele_project_th9

  8. zabbix4.0部署

    1.环境检查 uname -r getenforce systemctl status firewalld.service 2.设置解析,自建yum源(可选) /etc/hosts #!/bin/ba ...

  9. ORM模型类介绍,

    所有的软件开发过程中,都会涉及到对象和关系型数据库,在用户层面和业务逻辑层面,程序员编写代码都是面向对象的,当我们对象的信息发生变化的时候,都需要将对应的信息,传到关系型数据库中.而在此之前,需要我们 ...

  10. mybatis的一些小细节

    Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...