当前位置: 首页 > news >正文

超级好用的C++实用库之文件目录操作

💡 需要该C++实用库源码的大佬们,可扫码关注文章末尾的微信公众号二维码,或搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C++实用库”,即可获得源码的下载链接。

概述

        文件和目录操作是操作系统层面上的基础功能,允许用户或程序对磁盘上的文件以及目录结构进行管理。文件操作主要包括:创建文件、打开文件、读写文件内容、移动或定位文件指针以及关闭文件等功能,目录操作主要包括:创建目录、删除目录、移动目录、重命名目录、列出目录内容等功能。在C/C++编程中,除了标准库提供的stdio.h中的文件和目录操作函数外,还可以利用POSIX API (dirent.h, unistd.h) 或Windows API来进行更底层的操作。

CHP_File类

        在Windows和Linux操作系统下进行文件和目录操作的系统API并不相同,比如:对于创建目录的操作,Windows下使用CreateDirectory函数,Linux下使用mkdir函数。为了封装跨平台的文件目录操作,我们实现了CHP_File类。CHP_File类的头文件,可参考下面的示例代码。

#pragma once#include <string>
#include <vector>typedef void *HFileFinder;class CHP_File
{
public:static int GetFileTime(const char *pszFile, time_t &tmCreated, time_t &tmModified);static int GetFileSize(const char *pszFile, unsigned int &uiSizeBytes);static int CreateDir(const char *pszDir, bool bRecursive = true);static int RemoveDir(const char *pszDir, bool bIgnoreError = true);static void FindFiles(const char *pszDir, const char *pszFilter, std::vector<std::string> &vctFile, bool bRecursive = true);static void FindSubDirs(const char *pszDir, std::vector<std::string> &vctSubDir, bool bRecursive = true);static char *FindOpen(HFileFinder &hFinder, const char *pszDir, bool bFindDir, char *pszFile, int nFileLen);static char *FindNext(HFileFinder hFinder, const char *pszDir, bool bFindDir, char *pszFile, int nFileLen);static void FindClose(HFileFinder hFinder);private:CHP_File();~CHP_File();static char *FindFile(HFileFinder &hFinder, const char *pszDir, bool bFindDir, char *pszFile, int nFileLen, bool bFirst);#ifdef _WIN32static bool RemoveExistingDir(const char *pszDir);static bool RemoveExistingFile(const char *pszFile);
#endif
};

        CHP_File类是一个接口类,不需要实例化。因此,我们将构造函数和析构函数声明成了私有的,并提供了9个静态函数。下面,我们将分别介绍这几个导出的公共接口。

        GetFileTime:获取文件的创建时间和修改时间。参数pszFile为文件名,参数tmCreated为文件的创建时间,参数tmModified为文件的修改时间,返回值为0表示成功,其他为错误码。

        GetFileSize:获取文件的大小。参数pszFile为文件名,参数uiSizeBytes为文件大小,单位为字节,返回值为0表示成功,其他为错误码。

        CreateDir:创建目录。参数pszDir为待创建的目录名,参数bRecursive表示是否递归创建所有目录,返回值为0表示成功,其他为错误码。

        RemoveDir:删除目录。参数pszDir为待删除的目录名,参数bIgnoreError表示是否忽略错误,返回值为0表示成功,其他为错误码。

        FindFiles:查找指定目录下的文件。参数pszDir为待查找的目录;参数pszFilter为过滤器,支持'?'和'*',为NULL或空字符串时,表示查找所有文件;参数vctFile为符合条件的所有文件;参数bRecursive表示是否递归子目录查找。

        FindSubDirs:查找指定目录下的目录。参数pszDir为待查找的目录,参数vctSubDir为符合条件的所有目录,参数bRecursive表示是否递归子目录查找。

        FindOpen:打开文件查找,适用于逐个查找文件。参数hFinder为文件查找的句柄;参数pszDir为待查找的目录;参数bFindDir表示查找目录还是文件,true表示查找目录,false表示查找文件;参数pszFile为找到的文件名或者目录名;参数nFileLen为文件名或者目录名的长度。返回值为非NULL表示找到,是找到的文件名或目录名的buffer指针,否则表示未找到。

        FindNext:查找下一个文件。参数hFinder为文件查找的句柄;参数pszDir为待查找的目录;参数bFindDir表示查找目录还是文件,true表示查找目录,false表示查找文件;参数pszFile为找到的文件名或者目录名;参数nFileLen为文件名或者目录名的长度。返回值为非NULL表示找到,是找到的文件名或目录名的buffer指针,否则表示未找到。

        FindClose:关闭文件查找。参数hFinder为文件查找的句柄。

总结

        在CHP_File类中,我们封装了获取文件的创建时间和修改时间、获取文件的大小、创建目录、删除目录、查找指定目录下的文件、查找指定目录下的目录、打开文件查找、查找下一个文件、关闭文件查找等跨平台的功能和函数。这些函数,是通过兼容多种操作系统API,或使用标准库提供的函数来实现的。

http://www.lryc.cn/news/345433.html

相关文章:

  • 结合kimi chat的爬虫实战思路
  • UnsupportedClassVersionError异常如何解决?
  • LeetCode热题100|动态规划Part.1|70.爬楼梯、118.杨辉三角、198.打家劫舍
  • python 根据网址和关键词批量下载影像
  • 爬虫-无限debug场景 解决方式
  • [链表专题]力扣206, 203, 19
  • 秋招后端开发面试题 - MySQL基础
  • 力扣每日一题113:路径总和||
  • Thinkphp5 中常见的session 操作方法
  • inBuilder 低代码平台新特性推荐 - 第十八期
  • 部署xwiki服务需要配置 hibernate.cfg.xml如何配置?
  • 1376:信使(msner)
  • Hadoop3:HDFS的架构组成
  • P2910 [USACO08OPEN] Clear And Present Danger S
  • ES6 对象方面的新特性
  • GO语言核心30讲 进阶技术 (第一部分)
  • [力扣题解]225. 用队列实现栈
  • Leetcode—2105. 给植物浇水 II【中等】
  • wordpress外贸建站公司歪建站新版网站上线
  • 关于二手车系统学习--登录模块
  • 若依生成代码的步骤
  • 深度学习论文: LightGlue: Local Feature Matching at Light Speed
  • 全面解析C++11与C++20线程(含内容)
  • 【八股】消息中间件
  • 【17-Ⅰ】Head First Java 学习笔记
  • weblogic 反序列化 [CVE-2017-10271]
  • CoPilot 产品体验:提升 OpenNJet 的控制管理和服务提供能力
  • Leetcode 第396场周赛 问题和解法
  • OC foudation框架(上)学习
  • 【机器学习300问】83、深度学习模型在进行学习时梯度下降算法会面临哪些局部最优问题?