c++常用工具类函数

ops/2024/9/25 21:27:55/

递归读取文件名

void listFiles(const std::string& path,std::vector<std::string>&vec) {

    DIR* dir;

    struct dirent* entry;

    struct stat statbuf;

    if ((dir = opendir(path.c_str())) == nullptr) {

        std::cerr << "Error opening directory: " << path << std::endl;

        return;

    }

    while ((entry = readdir(dir)) != nullptr) {

        std::string entryName = entry->d_name;

        std::string fullPath = path + "/" + entryName;

        if (entryName != "." && entryName != "..") {

            if (stat(fullPath.c_str(), &statbuf) == -1) {

                std::cerr << "Error getting file stats for: " << fullPath << std::endl;

                continue;

            }

            if (S_ISDIR(statbuf.st_mode)) {

                // 递归调用以处理子目录

                listFiles(fullPath,vec);

            } else {

                // 打印文件名

               // std::cout << fullPath << std::endl;

                vec.push_back(fullPath);

            }

        }

    }

    closedir(dir);

}

递归创建目录

#include <iostream>
#include <string>
#include <vector>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

// 用于分割路径的函数
std::vector<std::string> split(const std::string &path, const std::string &delimiter) {
    std::vector<std::string> tokens;
    size_t start = 0, end = 0;
    while ((end = path.find(delimiter, start)) != std::string::npos) {
        tokens.push_back(path.substr(start, end - start));
        start = end + delimiter.length();
    }
    tokens.push_back(path.substr(start));
    return tokens;
}

// 递归创建目录的函数
bool createDirectories(const std::string &path) {
    // 分割路径
    std::vector<std::string> pathParts = split(path, "/");
    //get current directory
    char buff[1024];
    if (getcwd(buff, sizeof(buff)) != nullptr) {
        std::cout << "Current path: " << buff << std::endl;
    } else {
        perror("getcwd() error");
    }

    std::string currentPath=std::string(buff);
    // 逐级创建目录
    for (size_t i = 0; i < pathParts.size(); ++i) {
        currentPath += "/" + pathParts[i];
        // 跳过空字符串
        if (currentPath == "/") {
            continue;
        }
        // 跳过非目录部分
        if (i < pathParts.size() - 1) {
            struct stat st;
            if (stat(currentPath.c_str(), &st) != 0) {
                // 如果目录不存在,则创建它
                if (mkdir(currentPath.c_str(), 0755) == -1) {
                    // 如果创建失败,并且不是因为目录已存在
                    if (errno != EEXIST) {
                        std::cerr << "Error creating directory: " << currentPath << std::endl;
                        return false;
                    }
                }
            }
        }
    }
    return true;
}

int test() {
    std::string dirPath = "path/to/your/directory";
    if (createDirectories(dirPath)) {
        std::cout << "Directories created successfully" << std::endl;
    } else {
        std::cerr << "Failed to create directories" << std::endl;
    }
    return 0;
}
 


http://www.ppmy.cn/ops/115956.html

相关文章

创建两个着色器程序

创建两个着色器程序&#xff0c;第二个程序使用一个不同的片段着色器&#xff0c;输出黄色&#xff1b;再次绘制这两个三角形&#xff0c;让其中一个输出为黄色 在这篇博客中&#xff0c;我们将创建两个着色器程序&#xff0c;其中一个将输出橙色&#xff0c;另一个将输出黄色。…

MySQL篇(数据库范式)(持续更新迭代)

目录 一、什么是范式 二、三大范式 第一范式&#xff08;1NF&#xff09; 第二范式&#xff08;2NF&#xff09; 第三范式&#xff08;3NF&#xff09; 三、其他大三范式 巴斯-科德范式&#xff08;BCNF&#xff0c;Boyce-Codd Normal Form&#xff09; 第四范式&#x…

Web3技术在元宇宙中的应用:从区块链到智能合约

随着元宇宙的兴起&#xff0c;Web3技术正逐渐成为其基础&#xff0c;推动着数字空间的重塑。元宇宙不仅是一个虚拟世界&#xff0c;它还代表着一个由去中心化技术驱动的新生态系统。在这个系统中&#xff0c;区块链和智能合约发挥着至关重要的作用&#xff0c;为用户提供安全、…

计算机毕业设计之:基于微信小程序的校园流浪猫收养系统(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【Linux】Linux的基本指令(1)

A clown is always a clown.&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;Linux的背景 •&#x1f330;1.Unix发展的历史 •&#x1f330;2.Linux发展历史 •&#x1f330;3.企业应用现状 •&#x1f330;4.发行版本 &…

正向科技|格雷母线定位系统的设备接线安装示范

格雷母线安装规范又来了&#xff0c;这次是设备接线步骤 格雷母线是格雷母线定位系统的核心部件&#xff0c;沿着移动机车轨道方向上铺设&#xff0c;格雷母线以相互靠近的扁平状电缆与天线箱电磁偶合来进行信号传递&#xff0c;从而检测得到天线箱在格雷母线长度方向上的位置。…

K8s flink-operator 例子

1.参考官网&#xff1a; https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/docs/try-flink-kubernetes-operator/quick-start/ 2.首先环境具备 k8s、helm 我的环境 k8s 1.30 最新版本了 [rootk8s-master ~]# kubectl get no -owide NAME …

天润融通发布微藤智能体平台,中国客户联络正式进入“智能体时代”

9月19日&#xff0c;以“云启智跃&#xff0c;产业蝶变”为主题的2024云栖大会在杭州正式开幕。大会持续三天&#xff0c;聚焦AI时代的技术升级与实践应用&#xff0c;设有三大主论坛、400多个分论坛&#xff0c;并开放4万平方米的智能科技展区&#xff0c;展示全球百余款AI应用…