超级好用的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 _WIN32
    static 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,或使用标准库提供的函数来实现的。

相关文章
|
27天前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
418 2
|
4月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
320 3
|
30天前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
87 11
|
1月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
1月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
250 2
|
2月前
|
并行计算 C++ Windows
|
10月前
|
JSON C++ 数据格式
C++20 高性能基础库--兰亭集库助力开发者构建高性能应用
这次分享的主题是《高性能基础库--兰亭集库助力开发者构建高性能应用》的实践经验。主要分为三个部分: 1. 业务背景 2. 雅兰亭库架构 3. 业务优化
289 9
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
5月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
144 0