C/C++打开目录、读取目录、获取目录下文件状态

1、程序示例

// lstat 或者 stat 需要包含的头文件  

#include <sys/types.h>    

#include <sys/stat.h>  

// perror() 需要包含的头文件

#include<stdio.h>

// struct dirent 和 DIR 需要包含的头文件

#include <dirent.h>

//其它cout和ctime需要包含头文件

#include <iostream>  

#include <time.h>


string path_Name = "/home/temp"; 

DIR *dirptr = NULL;  //定义一个指向所打开的目录中文件的指针

char cFilePathName[128];

if ( ( dirptr= opendir( path_Name.c_str() )) == NULL )

{

      perror("打开目录出错! ");  // 这里的perror打印出对应的内容到标准输入终端,并紧接着打印出errno的宏定义的值(全局变量,表示上一次函数执行所返回的错误编号)所对应的错误信息提示字符串内容。

}

else

{

     struct dirent * dircontent;  //定义一个承接获取的目录中的文件信息的指针

     while ( ( dircontent = readdir( dirptr) ) != NULL )    //会自动将dirptr加1指向下一个文件

    {

      if ( (0 == strcasecmp(dircontent ->d_name, ".")) ||  (0 == strcasecmp(dircontent ->d_name, ".."))  )

            {  continue; }   //不对目录下的 . 和 .. 做处理。

           sprintf( cFilePathName, "%s/%s", path_Name.c_str()  , dircontent->d_name);

    struct stat file_info_stru;

            if ( lstat(  cFilePathName , &file_info_stru ) < 0 )    // 通过 lstat 或者 stat 获取文件状态,返回0表示正常,返回值 -1表示异常。

           {

                 perror( "获取文件信息异常!" );

           }

           else

           {

                  //获取文件信息正常

                  // 文件的大小,字节

                    cout << "*******文件名: " << cFilePathName << endl;

          cout << "size of the file in bytes: " << file_info_stru.st_size << endl;    

          // 文件创建的时间    

          cout << "time of creation of the file: " << ctime (file_info_stru.st_ctime) << endl;   

          // 最近一次修改的时间    

          cout << "time of last modification of the file: " << ctime (file_info_stru.st_mtime) << endl;    

          // 最近一次访问的时间    

          cout << "time of last access of the file: " << ctime (file_info_stru.st_atime)<< endl;  

           }

    }

     closedir(dirptr);   //关闭目录

}

2、struct dirent 结构体

    主要是通过readdir 获取到的目录下一个文件的简单信息,包括文件名、文件名长度、文件类型、在目录文件中的偏移量。

struct dirent
{
   long d_ino; /* inode number 索引节点号 */
   off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
   unsigned short d_reclen; /* length of this d_name 文件名长 */
   unsigned char d_type; /* the type of d_name 文件类型 */
   char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}

3、stat 结构体

       stat结构体是文件(夹)信息的结构体,通常用的比较多的是文件大小(st_size)、访问时间(st_atime)、创建时间(st_ctime)、修改时间(st_mtime)。

struct stat  

{   

    dev_t       st_dev;     /* ID of device containing file -文件所在设备的ID*/  

    ino_t       st_ino;     /* inode number -inode节点号*/    

    mode_t      st_mode;    /* protection -保护模式?*/    

    nlink_t     st_nlink;   /* number of hard links -链向此文件的连接数(硬连接)*/    

    uid_t       st_uid;     /* user ID of owner -user id*/    

    gid_t       st_gid;     /* group ID of owner - group id*/    

    dev_t       st_rdev;    /* device ID (if special file) -设备号,针对设备文件*/    

    off_t       st_size;    /* total size, in bytes -文件大小,字节为单位*/    

    blksize_t   st_blksize; /* blocksize for filesystem I/O -系统块的大小*/    

    blkcnt_t    st_blocks;  /* number of blocks allocated -文件所占块数*/    

    time_t      st_atime;   /* time of last access -最近存取时间*/    

    time_t      st_mtime;   /* time of last modification -最近修改时间*/    

    time_t      st_ctime;   /* time of last status change - */    

}; 

4、errno.h说明

   errno.h属于C标准函式库里的头文件,该头文件主要是将一些表示错误的码,定义为整数值的宏定义:

5、perror()打印错误日志的方法说明

       perror(s) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno的值来决定要输出的字符串。

        在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用某些函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和errno所对应的错误一起输出。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注:分卷一的说明写错了,总共三卷压缩包 Visual C++通用范例开发金典(附光盘)/开发专家 (分卷二/共三卷) 【作者】: 韦朴 陈泰生 【出版日期】:2008-06 【出版社】:电子工业出版社 【所属分类】: 图书 > 工业技术 【所属分类】: 图书 > 计算机与网络 > 程序语言与软件开发 【附属物】:光盘1张 【总 页 数】:631 【产品条码】:9787121065675 【语 种】:汉 【装  帧】:平装 【开  本】:259mmX184mm 【丛书名】:开发专家 【适合年龄群】:青年(14-20岁),研究人员,普通成人 【关键字】:C语言//程序设计 【首印年月】:2008-06 【本版年月】:2008-06 【本次出版年月】:2008-06 【版次印次】:第1版第1次 【简介】    Visual C++是Microsoft公司开发的可视化软件开发工具,具有简单、高效、功能强大等特点,是Windows环境下优秀的程序设计工具之一。本书系统全面地介绍了Visual C++软件——Microsoft Visual C++6.0的具体使用方法和操作技巧。全书按照Visual C++的实际应用共分为11章,主要内容包括:用户界面设计、文档应用程序设计、图形程序设计、文件I/O与串行化程序设计、多媒体程序设计、系统控制与注册表、数据库技术程序设计、网络、通信技术程序设计、打印程序设计、线程和进程程序设计、动态链接库和ActiveX控件等。    本书是各级程序开发人员的必备参考书,同时也非常适合大中专院校师生阅读。此外,本书也非常适于作为各类培训班的培训教程。 【目录】   第1章 用户界面设计    1.1 常用控件程序设计    1.1.1 静态控件和按钮范例    1.1.2 编辑框和旋转按钮控件范例    1.1.3 列表框控件范例    1.1.4 进展条、滚动条和滑动条控件范例    1.1.5 Tab控件、时间控件、列表控件和树控件范例    1.2 对话框程序设计    1.3 本章小结   第2章 文档应用程序设计    2.1 菜单程序设计    2.1.1 静态菜单设计    2.1.2 动态菜单设计    2.2 工具栏和状态栏程序设计    2.2.1 窗口外观修改    2.2.2 工具栏和状态栏    2.3 文档与视图程序设计    2.3.1 基于文本的编程    2.3.2 框架窗体的编程    2.4 本章小结   第3章 图形程序设计    3.1 基本图形绘制    3.1.1 简单直线的绘制    3.1.2 画刷    3.1.3 复杂图形的绘制    3.1.4 文本绘制    3.2 图像操作    3.2.1 图像显示    3.2.2 图像效果变化    3.2.3 图像基本操作    3.3 3D图形的绘制    3.4 本章小结   第4章 文件I/O与串行化程序设计    4.1 文件基本操作    4.1.1 文件的读、写操作    4.1.2 文档与串行化    4.2 高级文件操作    4.2.1 文件的删除与搜索    4.2.2 文件夹和文件目录    4.3 本章小结   第5章 多媒体程序设计    5.1 多媒体音频操作    5.2 多媒体视频操作    5.3 本章小结   第6章 系统控制与注册表    6.1 注册表相关操作    6.1.1 注册表的读取与写入    6.1.2 注册表的备份    6.1.3 注册表的恢复    6.1.4 设置注册表键值    6.1.5 删除子键    6.1.6 注册表枚举函数    6.2 系统控制    6.2.1 隐藏、显示文件    6.2.2 隐藏、显示文件夹    6.2.3 隐藏“我的电脑”    6.2.4 隐藏驱动器    6.2.5 隐藏“回收站”    6.2.6 隐藏“我的文档”    6.2.7 隐藏桌面上的所有图标    6.2.8 隐藏任务栏    6.2.9 禁用注册表    6.2.10 关闭计算机    6.2.11 注销当前用户    6.2.12 设置启动自动运行程序    6.2.13 设置、显示系统当前时间    6.2.14 获取当前显示模式    6.2.15 获取操作系统版本号    6.2.16 设置桌面墙纸    6.2.17 隐式链接DLL    6.2.18 显式链接DLL    6.3 IE设置    6.3.1 修改IE标题栏    6.3.2 修改IE默认主页    6.3.3 在IE中禁止显示工具栏    6.3.4 在IE中禁止显示状态栏    6.3.5 使打开的IE窗口最大化    6.3.6 清空地址栏历史记录    6.3.7 改变收藏夹的默认路径    6.3.8 显示IE工具栏中的【字体】按钮    6.3.9 删除网页链接中的下画线    6.3.10 设置IE的缓冲区路径    6.3.11 隐藏上次登录用户的记录    6.3.12 设置域名服务器超时    6.4 系统软件信息    6.4.1 获取系统注册用户名    6.4.2 获取系统注册单位名    6.4.3 获取当前用户名    6.4.4 获取计算机名    6.4.5 获取操作系统安装序列号    6.4.6 获取操作系统的产品名称    6.4.7 获取IE的版本号    6.4.8 获取Windows的版本号    6.4.9 获取Windows的内建号    6.4.10 获取Windows的版本名称    6.4.11 获取临时文件夹的位置    6.4.12 获取“桌面”文件夹的位置    6.4.13 获取字体文件夹的位置    6.4.14 获取“网上邻居”文件夹的位置    6.4.15 获取“我的文档”文件夹的位置    6.4.16 获取System文件夹的位置    6.4.17 获取Windows文件夹的位置    6.5 系统硬件信息    6.5.1 获取CPU名称    6.5.2 获取CPU标识    6.5.3 获取CPU制造商名称    6.5.4 获取CPU主频    6.5.5 获取CPU个数    6.5.6 获取显卡BIOS版本号    6.5.7 获取显卡BIOS的更新日期    6.5.8 获取系统BIOS版本号    6.5.9 获取系统BIOS的更新日期    6.6 存储设备管理    6.6.1 获取磁盘序列号    6.6.2 获取磁盘卷标名称    6.6.3 设置磁盘卷标名称    6.6.4 获取磁盘容量大小    6.6.5 获取磁盘剩余容量大小    6.6.6 获取磁盘“文件系统”名称    6.6.7 获取系统所有的磁盘驱动器    6.6.8 判断磁盘驱动器类型    6.7 本章小结   第7章 数据库技术程序设计    7.1 数据库的连接和遍历    7.1.1 数据库的连接    7.1.2 数据库的遍历    7.2 数据查询技术    7.2.1 基本查询    7.2.2 以时间为基础的查询    7.2.3 模糊查询    7.2.4 条件查询    7.2.5 统计汇总查询    7.2.6 分组查询    7.2.7 查询的排序    7.2.8 连接查询    7.2.9 子查询技术    7.2.10 合并查询    7.2.11 控件查询技术    7.3 数据的删除与更新    7.3.1 数据删除    7.3.2 数据更新    7.4 本章小结   第8章 网络、通信技术程序设计    8.1 基本网络操作    8.1.1 本地信息操作    8.1.2 获取网络信息    8.2 高级网络操作    8.3 基于串口的通信    8.4 本章小结   第9章 打印程序设计    9.1 基本打印操作    9.1.1 打印的基本框架    9.1.2 单文档打印    9.1.3 对话框打印    9.2 打印控制    9.2.1 打印参数获取    9.2.2 打印参数设置    9.3 本章小结   第10章 线程和进程程序设计    10.1 线程的创建和终止    10.2 线程同步    10.3 进程间通信    10.4 本章小结   第11章 动态链接库和ActiveX控件    11.1 动态链接库    11.2 ActiveX控件    11.3 本章小结   索引   参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值