前面的一篇文章我们讲了用Windows API遍历一个目录下的所有文件,这次我们讲用一种Windows/Linux通用的方法遍历一个目录下的所有文件。

Windows/Linux的IDE都会提供一个头文件——。看名字,似乎是关于I/O的,但是实际上它还提供了类似于WIN32_FIND_DATA、FindFirstFile()、FindNextFile()和FindClose()的查找文件的功能。

_finddata_t结构

_finddata_t结构用来记录查找到的文件的信息。实际上有_finddata32_t、_finddata32i64_t、_finddata64i32_t、_finddata64_t、_wfinddata32_t、_wfinddata32i64_t、_wfinddata64i32_t、_wfinddata64_t八个结构,但都只是在32位/64位整数和字符类型上有所区别,但整体上相同。大致定义如下(MSDN):

struct_finddata_t

{

unsigned attrib;

size_t time_create;

size_t time_access;

size_t time_write;

_fsize_t size;charname[_MAX_PATH];

};

对于不同的_finddata_t结构,time_create、time_access和time_write的类型为_time32_t或_time64_t,size的类型为_fsize_t或__int64,name为char[_MAX_PATH]或wchar_t[_MAX_PATH]。

attrib

unsigned类型,文件属性。

time_create

_time32_t/_time64_t类型,文件创建时间(FAT文件系统为-1)。以UTC格式存储,如果需要转换成当地时间,使用localtime_s()。

time_access

_time32_t/_time64_t类型,文件最后一次被访问的时间(FAT文件系统为-1)。以UTC格式存储,如果需要转换成当地时间,使用localtime_s()。

time_write

_time32_t/_time64_t类型,文件最后一次被写入的时间。以UTC格式存储,如果需要转换成当地时间,使用localtime_s()。

size

_fsize_t/__int64类型,文件的长度(以字节为单位)。

name

char[_MAX_PATH]/wchar_t[_MAX_PATH]类型,文件/目录名,不包含路径。

对于不支持文件创建时间、文件上一次访问时间的文件系统,time_create和time_access为-1。

_MAX_PATH在stdlib.h中被定义为260。

一般_finddata_t被定义为_finddata32_t/_finddata64i32_t,_wfinddata_t被定义为_wfinddata32_t/_wfinddata64i32_t。为方便,下文中将_finddata_t和_wfinddata_t统称为_finddata_t。

文件属性常量

一个文件/目录可以有多种属性,每种属性可以是下面列出的属性之一。

_A_ARCH

档案。文件被BACKUP指令改变或清除时被设置。值:0x20。

_A_HIDDEN

隐藏。使用DIR指令一般看不到,除非使用/AH选项。值:0x02。

_A_NORMAL

普通。文件没有更多属性被设置,可以没有限制地被读或写。值:0x00。

_A_RDONLY

只读。不能以“写”为目的打开该文件,并且不能创建同名的文件。值:0x01。

_A_SUBDIR

子目录。值:0x10。

_A_SYSTEM

系统文件。使用DIR指令一般看不见,除非使用/A或/A:S选项。值:0x04。

要检查x是否含有某个属性a,可以用x & a进行检查。指定多个属性可以使用按位or运算符,例如_A_SYSTEM |  _A_RDONLY | _A_HIDDEN。

通配符(wildcards)

遍历文件目录时需要使用通配符,详见。

_findfirst()/_findnext()/_findclose()函数

_findfirst()函数

intptr_t _findfirst(const char *filespec,struct _finddata_t *fileinfo

);

实际上_findfirst()有10个版本,这里只列出一个。

filespec

const char */const wchar_t *类型,目标文件说明(可包含通配符)。

fileinfo

_finddata_t *类型,函数将会填入文件/目录信息。

返回值

如果成功,返回一个唯一的搜索句柄标识一个或一组和filespec说明匹配的文件,可以用于接下来的_findnext()和_findclose()函数。否则_findfirst()返回-1。注意,intptr_t并不是指针类型,只是int或__int64的typedef。

_findnext()函数

int_findnext(

intptr_t handle,struct _finddata_t *fileinfo

);

handle

intptr_t类型,搜索句柄。

fileinfo

_finddata_t *类型,函数将会填入文件/目录信息。

返回值

如果成功,返回0,否则返回-1。如果没有更多能够找到的文件了,也会导致失败。

程序代码

linux整个文件夹下全部文件的属性,C/C++遍历目录下的所有文件(Windows/Linux篇,超详细)...相关推荐

  1. XCopy复制文件夹命令及参数详解以及xcopy拷贝目录并排除特定文件

    XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件:使用时源盘符.源目标路径名.源文件名至少指定一个:选用/S时对源目录下及其子目录下的所有文件进行COPY.除非 ...

  2. linux sed 目录递归,shell递归遍历目录下的所有文件并统一改名的方法-文件更名...

    对Linux开发技术感兴趣或者是从事Linux开发技术的小伙伴是否知道如何把某个目录下的每个文件统一在名字前加上"abc",用shell实现呢?下面就随Linux培训小编来了解一下 ...

  3. win12服务器文件设置只读,如何在Win10系统中更改文件夹的只读或系统属性

    正常情况下通过右键属性只能更改文件的只读属性,系统win10属性则连相应选项都没有.那么如何在Win10系统中更改文件夹的只读或系统属性呢?下面跟着学习啦小编来一起了解下吧. 在Win10系统中更改文 ...

  4. linux系统搭建ftp服务器--只给某个用户访问其默认目录下的文件

    1.环境: window操作系统中安装FlashFXP 软件或xftp: 服务器端的操作系统为centos8: 2.检查安装vsftpd软件 查看所有的安装的软件包 并在结果中查找包含vsftp 的文 ...

  5. Linux和Windows的遍历目录下所有文件的方法对比

    首先两者读取所有文件的方法都是采用迭代的方式,首先用函数A的返回值判断目录下是否有文件,然后返回值合法则在循环中用函数B直到函数B的返回值不合法为止.最后用函数C释放资源. 1.打开目录 #inclu ...

  6. python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...

    Python--os.mkdir()在指定路径下创建文件夹 + 路径的连接理解 发布时间:2018-11-16 17:08, 浏览次数:512 , 标签: Python os mkdir 引子: 我在 ...

  7. linux temp文件夹在哪_手机文件夹是英文不敢乱删?找出这5个文件夹,手机瞬间轻松6个G...

    很多朋友都想问,明明刚用没多久的手机,天天卡到怀疑人生,用手机清理软件里里外外清理了好几遍,还是没有任何改变.翻翻文件夹全是英文,又不敢随便清理,为啥国产手机文件夹全是英文,咱也不敢问,简直难过的想流 ...

  8. 华为手机怎么打开php文件夹,64GB内存的华为手机空间不足,点下这4个文件夹,轻松释放10个G...

    我们通常在遇到手机内存空间不足的时候,都会选择使用手机管家清理,或者将手机里面的一些照片进行清除. 因为华为手机像素比较高,拍出来的照片占据较大的内存空间. 今天就来教大家找出华为手机里面4个英文文件 ...

  9. os.walk 遍历目录下目录和文件

    python中os.walk是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 1.载入 要使用os.walk,首先要载入该函数 可以使用以下两种方法 import os ...

最新文章

  1. Python交换两个变量的三种方法
  2. transformer bert GPT(未完)
  3. 马哥-Linux云计算架构班学习计划
  4. 一个简单的GridView分页通用程序
  5. oracle11g 安装在rhel5.0笔记
  6. os.environ 和 keras.json
  7. 二叉树中和为某一值的路径(一)(C++)
  8. Java(面向对象OOP)
  9. 智能优化算法——差分进化算法(Python实现)
  10. c语言中怎么避免整数除法,大整数除法
  11. arcgis 只能查看指定行政区域_用ArcGIS来实现坐标转换操作,以及相关的使用心得...
  12. 【MindSpore易点通】一站式指南
  13. Region和Available Zone的区别
  14. 全球定位经纬度的方法现在是GPS等系统定位,以前是指南针罗盘六分仪
  15. 网站机房:DDOS防火墙在企业机房中的应用介绍
  16. (素材源码)swanzhu学IOS(三)打飞机
  17. postgreSql版的occurs函数
  18. 利用python解决简单数独
  19. 利用QT制作串口助手
  20. 关于 VB6 透明 PNG 图像生成的一个解决方案

热门文章

  1. centos7.4下安装配置PHP服务(源码安装)并配置nginx支持php
  2. 内联元素,取消间隙和默认效果
  3. 2016.3.16(Java图形用户界面)
  4. The 6th Zhejiang Provincial Collegiate Programming Contest-ProblemA:Second-price Auction
  5. 如何让大数据从发现价值到创造价值
  6. 时间处理:计算下一天日期,如输入2004/12/31(注释2014年12月31日),则输出2005/1/1....
  7. [INS-20802] Oracle Net Configuration Assistant failed
  8. 异常Address already in use: JVM_Bind的处理
  9. 设计包含min函数的栈,O(1)空间实现方法
  10. Flutter中ListView动画OpenContainer动画Flutter径向过渡OpenContainer