c++常用工具类函数

递归读取文件名

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.xdnf.cn/news/1545570.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

海报制作哪个软件好?建议试试这5个

2024年过得飞快&#xff0c;转眼间国庆佳节即将到来。 在这个举国欢庆的时刻&#xff0c;无论是商家还是个人&#xff0c;都希望通过海报来传递节日的喜悦和祝福。制作一张吸引人的海报&#xff0c;不仅能提升品牌形象&#xff0c;还能增强节日氛围。 那么&#xff0c;如何快…

工程车辆目标检测、工程车检测算法、工程车辆类型检测算法

工程车检测算法主要用于智能交通系统、建筑工地管理、矿山开采、物流运输等领域&#xff0c;通过图像识别技术来检测和识别工程车&#xff0c;以提高安全管理、交通流量管理和资源调度的效率。以下是关于工程车检测算法的技术实现、应用场景及优势的详细介绍。 一、技术实现 工…

线性代数(持续更新)

一.矩阵及其计算 1.矩阵的概念 矩阵就是一个数表 元素全是0&#xff0c;是零矩阵&#xff0c;用0来表示 当mn时&#xff0c;称为n阶矩阵&#xff08;方阵&#xff09; 只有一行的叫行矩阵&#xff0c;只有一列的叫列矩阵 只有对角线有元素的叫做对角矩阵&#xff0c;用dia…

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大

LiveNVR监控流媒体Onvif/RTSP功能-支持电子放大拉框放大直播视频拉框放大录像视频流拉框放大电子放大 1、视频广场2、录像回看3、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、视频广场 视频广场 -》播放 &#xff0c;左键单击可以拉取矩形框&#xff0c;放大选中的范围&#xff…

POST请求的艺术:如何有效使用POST方法

在HTTP协议中&#xff0c;POST方法是一种用于向服务器提交数据的请求方式。与GET请求不同&#xff0c;POST请求将数据包含在请求体&#xff08;request body&#xff09;中&#xff0c;而不是URL中。这使得POST请求更适合传输大量数据和敏感信息。本文将探讨如何有效使用POST方…

【递归】4.二叉树的前序遍历

1 题目解析 题目链接&#xff1a;二叉树的前序遍历 题目描述如下&#xff1a; 先回顾一下&#xff0c;二叉树的前序遍历的过程是&#xff1a;先遍历根&#xff0c;再遍历左子树&#xff0c;最后遍历右子树。 所以顺序就是&#xff1a;根&#xff0c;左子树&#xff0c;右子树…

Supabase 入门指南

Supabase 是一个开源替代品&#xff0c;用于 Firebase 提供的后端服务。它基于 PostgreSQL&#xff0c;提供实时数据库、身份验证、存储等功能。本文将深入探讨 Supabase 的主要功能&#xff0c;并结合不同场景给出代码实例。 1. 创建 Supabase 项目 首先&#xff0c;访问 S…

vulnhub靶场Matrix-win全流程

Matrix-Breakout 2 Morpheus&#xff08;win操作&#xff09; 如果靶场出现发送数据包无响应的情况&#xff0c;请重启服务器 靶机下载地址&#xff1a; https://download.vulnhub.com/matrix-breakout/c-2-morpheus.ova攻击机&#xff1a;win11(192.168.5.1) 信息收集 本…

React学习笔记(四)——React 组件生命周期

目录 1. 生命周期-概览 2. 生命周期-挂载阶段 3. 生命周期-更新阶段 4. 生命周期-卸载阶段 5. setState扩展-发现问题 6. setState扩展-更多用法 7. setState扩展-异步 1. 生命周期-概览 了解react类组件生命周期整体情况 大致步骤&#xff1a; 什么是生命周期React类组…

C盘空间不足--WizTree(管理空间)

WizTree&#xff1a;高效的磁盘空间分析工具 在日常使用电脑的过程中&#xff0c;磁盘空间的管理常常成为一个棘手的问题。随着文件的不断增加&#xff0c;我们的硬盘空间逐渐被占满&#xff0c;而这些文件中有很多其实并不重要。为了帮助用户更好地管理磁盘空间&#xff0c;Wi…

已存在的Python项目使用依赖管理工具UV

1. 文档 uv文档 2. 如何转换 初始化 uv initrequirements.txt转换成pyproject.toml uv add $(cat requirements.txt)删除requirements.txt 如果更新pyproject.toml之后&#xff0c;使用命令 uv sync替换项目环境 如果有库没有加入依赖&#xff0c;自己手动加一下&am…

美化网页,特效

当阅读博客园的文章时&#xff0c;经常看到精美的特效 博客园美化 - 凌云 - 博客园 (cnblogs.com) 简直不要太好看 自己写了一个前后端分离的网站后&#xff0c;想着应用这些特效&#xff0c;毕竟别人看到特效后逼格还是挺高的 于是&#xff0c;我F12把代码拿了下来 【手动狗…

普通人想自学AI产品经理,我劝你谨慎!

随着大模型技术的快速发展&#xff0c;市面上涌现出了大量的大模型产品岗位&#xff0c;那么想要进入AI行业的产品经理同学&#xff0c;需要提前做好哪些准备工作呢&#xff1f;这篇文章里&#xff0c;作者总结了入行AI的必备知识&#xff0c;包括市场调研、产品底层逻辑等内容…

逆概率加权(R和Python案例)

逆概率加权&#xff08;Inverse Probability Weighting, IPW&#xff09;是一种统计技术&#xff0c;用于观察性研究中调整混杂变量的影响&#xff0c;以便更准确地估计因果关系。这种方法特别有用于在无法进行随机化实验的情况下&#xff0c;通过给予不同个体不同的权重&#…

2024年9月最新web3开发人员薪资情况(包括不同语言、各个国家)

2024年9月最新web3非开发人员薪资情况&#xff08;包括不同语言、各个国家&#xff09; 开发人员的薪水是多少&#xff1f; Web3 开发人员的平均年薪为 14 万至 20 万美元。 量化开发人员每年可赚 20 万至 30 万美元 高级开发人员年薪 16 万至 25.7 万美元 北美开发商年薪 …

了解云计算工作负载保护的重要性,确保数据和应用程序安全

云计算de小白 云计算技术的快速发展使数据和应用程序安全成为一种关键需求&#xff0c;而不仅仅是一种偏好。随着越来越多的客户公司将业务迁移到云端&#xff0c;保护他们的云工作负载&#xff08;指所有部署的应用程序和服务&#xff09;变得越来越重要。云工作负载保护&…

可视掏耳勺鸡肋吗?高清可视掏耳勺牌子推荐!

很多人习惯在洗漱完顺手拿一根棉签掏耳朵&#xff0c;但是棉签的表面直径大且粗糙&#xff0c;不易将耳朵深处的耳垢挖出&#xff0c;耳垢堆积在耳道深处长时间不清理会导致堵塞耳道&#xff0c;引起耳鸣甚至感染。而可视掏耳勺作为一种新型的挖耳工具&#xff0c;它的安全性也…

【java常见面试题】

IO 按照流的流向分类&#xff1a;输入流和输出流 按照操作单元分类&#xff1a;可以分为字节流和字符流 按照流的角色划分&#xff1a;节点流和处理流 所有输入流的基类&#xff1a;InputStream/Reader 字节流/字符流 所有输出流的基类&#xff1a;OutputStream/Reader 字…

用友或畅捷通设置外网访问,使用的是神卓互联内网穿透

本文将详细介绍如何使用神卓互联内网穿透技术搭建单位用友软件的访问环境&#xff0c;以实现远程办公和管理的高效便捷。 目录 一、神卓互联内网穿透技术 二、准备工作 1. 注册神卓互联账号 2. 配置用友软件服务器 三、配置神卓互联内网穿透 1. 安装并启动神卓互联客户端…

吉客云与金蝶云星空对接集成分页查询货品信息连通[标准]

吉客云与金蝶云星空对接集成分页查询货品信息连通[标准][付款单新增]-v1(付款单) 对接系统&#xff1a;吉客云 “吉客云”是一站式企业数字化解决方案系统&#xff0c;可实现业务、财务、办公、人事等一体化管理。相对于传统多套软件系统的集成方案&#xff0c;“吉客云”具有业…