📜  c++ 文件系统读取目录 - C++ (1)

📅  最后修改于: 2023-12-03 14:59:49.133000             🧑  作者: Mango

C++ 文件系统读取目录

C++标准库提供了一组文件系统库函数,其中包含了读取文件目录的函数。本文将介绍如何使用C++标准库中的文件系统库函数来实现对目录的读取。

1. 头文件

使用C++文件系统库的第一步是包含头文件<filesystem>。这个库自C++17开始引入,如果使用C++11或C++14,还需要在编译时添加 -lstdc++fs 选项。

#include <filesystem>
namespace fs = std::filesystem;

可以通过 namespace 来定义简单的别名以增加可读性。在此代码片段中,我们定义了别名 fs 来代替命名空间 std::filesystem。以后我们会使用 fs 来调用文件系统库函数。

2. 判断文件是否是目录

要读取目录,首先需要打开目录。在打开目录之前,我们需要判断它是不是一个目录,这可以通过 fs::is_directory() 函数来实现。如果一个路径代表了一个目录,则该函数返回true,否则返回false。

if (fs::is_directory(path))
{
    // path represents a directory
}
else
{
    // path does not represent a directory
}
3. 打开目录并读取文件列表

如果文件路径代表一个目录,我们可以使用fs::directory_iterator类型打开它并读取其中的文件列表。fs::directory_iterator是一个对象,用于遍历一个目录中的文件和子目录。可以调用fs::begin()fs::end()函数来获取目录迭代器的起始和终止位置。

fs::directory_iterator iter(path);
fs::directory_iterator end;
for(; iter != end; iter++)
{
    // iter->path() 代表当前文件或子目录的路径
    if(fs::is_directory(iter->path())) {
        // 当前是子目录,继续遍历
    } else {
        // 当前是文件,处理它
    }
}

以上代码片段中,我们使用for循环遍历了目录,对于每个文件或子目录,如果它是目录,则继续遍历,否则处理它。iter->path() 代表了当前文件或子目录的路径。

4. 完整代码
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
{
    std::string path = "/path/to/dir";
    if (fs::is_directory(path))
    {
        fs::directory_iterator iter(path);
        fs::directory_iterator end;
        for(; iter != end; iter++)
        {
            if(fs::is_directory(iter->path()))
            {
                std::cout << "directory: " << iter->path() << std::endl;
            }
            else
            {
                std::cout << "file: " << iter->path() << std::endl;
            }
        }
    }
}
5. 结论

本文介绍了如何使用C++文件系统库函数来读取目录。读者可以通过本文代码片段的实例来学习,并可以根据自己的需要进行修改。