C++程序练习
定义一个类CheckPath,它由两个public方法组成:
1) checkPath:检查传入的字符串指定的路径是否存在,存在返回true,否则返回false。
2) createFilePath:根据传入的字符串指定的路径,创建由 pathDepth指定的路径,例如:如果传入字符串为/home/user/aa/bb,如果指定的pathDepath为0,则不创建这个路径,如果pathDepath为1,则创建从/开始创建所有路径,如果pathDepath为2,则创建从/home开始创建所有路径。
class CheckPath{
public:bool checkPath(std::string &filePath);bool createFilePath(const char * path, int pathDepth);
};
checkpath.cpp源文件:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <iostream>
#include <sstream>
#include <fstream>#define MAX_FILENAME_LEN 256class CheckPath{
public:bool checkPath(std::string &filePath);bool createFilePath(const char * path, int pathDepth);
};/* 测试指定目录是否存在 */
bool CheckPath::checkPath(std::string &filePath)
{char lastChar;struct stat buff;int istat;int isDir = 0;bool pathExists = false;int len = filePath.size();if (len == 0) return false;lastChar = filePath[len - 1];if (lastChar == '/'){filePath.resize(len - 1);}istat = stat(filePath.c_str(), &buff);if (!istat) isDir = (S_IFDIR & buff.st_mode);if (!istat && isDir){pathExists = true;}filePath.append("/");return pathExists;
}/* 安pathDepath指定深度开始创建指定的目录 */
bool CheckPath::createFilePath(const char * path, int pathDepth)
{bool result = true;char * parts[MAX_FILENAME_LEN];int num_parts;char directory[MAX_FILENAME_LEN];char nextDir[MAX_FILENAME_LEN];char * saveptr;int i = 0;/* donot create path */if (pathDepth == 0) return result;while ((path[i] == '/') && i < MAX_FILENAME_LEN){nextDir[i] = path[i];i++;}nextDir[i] = 0;printf("nextDir: %s\n", nextDir);strcpy(directory, &path[i]);printf("Directory: %s\n", directory);num_parts = 0;parts[num_parts] = strtok_r(directory, "\\/", &saveptr);while (parts[num_parts] != NULL){parts[++num_parts] = strtok_r(NULL, "\\/", &saveptr);}// for (i = 0; i < num_parts; i++){
// printf("%d: %s\n", i+1, parts[i]);//}if (pathDepth < 0){pathDepth = num_parts + pathDepth;if (pathDepth < 1) pathDepth = 1;}for (i = 0; i < num_parts && result != false; i++){strcat(nextDir, parts[i]);if (i >= pathDepth){// printf("depath = %d,create path %s\n",i, nextDir);if (mkdir(nextDir, 0777) != 0 && errno != EEXIST){result = false;}}strcat(nextDir, "/");}return result;
}/* 测试主程序 */
int main(int argc, char ** argv)
{if (argc != 2){fprintf(stderr, "Usage: %s pathname\n", argv[0]);return -1;}std::string filePath = argv[1];std::cout << "Check File Path : " << filePath << " exists?" << std::endl;;CheckPath * pcp = new CheckPath();/* Test file path exists or not */std::cout << "*****************************************"<<std::endl;std::cout << "Test Function 1 checkPath:" << std::endl;if (pcp->checkPath(filePath)){std::cout << "FilePath:" << filePath <<" does exist" << std::endl;}else{std::cout << "FilePath:" << filePath << " does not exist" << std::endl;}std::cout << "*****************************************"<<std::endl<<std::endl;;std::cout << "*****************************************"<<std::endl;std::cout << "Test Function 2 createFilePath:" << std::endl;std::cout << "Please enter a path to create:";std::cin >> filePath;std::cout << "The path to create :" << filePath << std::endl;int depth;std::cout << "Please enter the create depth:";std::cin >> depth;printf("Depth: %d\n", depth);if (pcp->createFilePath(filePath.c_str(), depth)){std::cout << "Create the " << depth << " depth of file path " << filePath << std::endl;}else{std::cout << "can not create file path " << filePath << std::endl;}std::cout << "*****************************************"<<std::endl;delete pcp;return 0;
}
编译以上代码,观察结果:
orangepi@orangepi5:~/C_program$ ./checkpath aa
Check File Path : aa exists?
*****************************************
Test Function 1 checkPath:
FilePath:aa/ does exist
**********************************************************************************
Test Function 2 createFilePath:
Please enter a path to create:/home/orangepi/C_program/aa/bb
The path to create :/home/orangepi/C_program/aa/bb
Please enter the create depth:3
Depth: 3
nextDir: /
Directory: home/orangepi/C_program/aa/bb
Create the 3 depth of file path /home/orangepi/C_program/aa/bb
*****************************************
orangepi@orangepi5:~/C_program$ ls aa/
bb
检查当前目录下aa目录时存在的,并且在aa目录下创建了一个bb目录。
相关文章:
C++程序练习
定义一个类CheckPath,它由两个public方法组成: 1) checkPath:检查传入的字符串指定的路径是否存在,存在返回true,否则返回false。 2) createFilePath:根据传入的字符串指定的路径&…...
Golang 继承
在面向对象的编程语言中,继承是一种重要的机制,它允许子类继承父类的属性和方法。然而,Go语言在设计时没有直接支持传统意义上的继承,而是提供了一种更为灵活和简洁的方式来实现类似的功能。本文将探讨Golang中实现继承的方法和最…...
棋盘格测距-单目相机(OpenCV/C++)
一、文章内容简述: 1’ 通过cv::findChessboardCorners寻找棋盘格角点 2‘ 用cv::solvePnP计算旋转向量rvec和平移向量tvec 3’ 通过公式计算相机到棋盘格的距离 float distance sqrt(tvec.at<double>(0,0) * tvec.at<double>(0,0) tvec.at<do…...

031-从零搭建微服务-监控中心(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...

vue中使用xlsx插件导出多sheet excel实现方法
安装xlsx,一定要注意版本: npm i xlsx0.17.0 -S package.json: {"name": "hello-world","version": "0.1.0","private": true,"scripts": {"serve": "vue-c…...

Linux - 进程的优先级 和 如何使用优先级调度进程
理解linux 当中如何做到 把一个PCB 放到多个 数据结构当中 在Linux 当中,一个进程的 PCB 不会仅仅值存在一个 数据结构当中,他既可以在 某一个队列当中,又可以在 一个 多叉树当中。 队列比如 cpu 的 运行队列,键盘的阻塞队列等等…...
支持控件drag和click
在 MouseDown 事件触发 DoDragDrop 拖拽操作时,Click 事件通常无效,因为 DoDragDrop 方法会捕获鼠标事件并等待拖拽操作完成。 有一个简单地思路解决这个问题 当MouseDow时,触发定时器,延迟100s定时器到时后,进入dra…...

AIR101 LuatOS LVGL 显示多个标签例程
屏幕资料 AIR101与屏幕连接 PC端仿真环境合宙官方PC端版本环境搭建教程 PC电脑仿真 -- sys库是标配 _G.sys require("sys") sys.taskInit(function()local cnt0lvgl.init(480,320)--lvgl初始化local cont lvgl.cont_create(nil, nil);-- lvgl.cont_set_fit(cont, …...

Istio实战(七)- Bookinfo 部署
1. Istio Bookinfo示例 1.1 部署Bookinfo # kubectl apply -f /apps/istio/samples/bookinfo/platform/kube/bookinfo.yaml -n hr1.2 确认Bookinfo已经部署正常 先确认以下pod和service已经被正确创建 # kubectl get pods -n hr NAME READY …...

出差学小白知识No5:|Ubuntu上关联GitLab账号并下载项目(ssh key配置)
1 注冊自己的gitlab账户 有手就行 2 ubuntu安装git ,并查看版本 sudo apt-get install git git --version 3 vim ~/.ssh/config Host gitlab.example.com User your_username Port 22 IdentityFile ~/.ssh/id_rsa PreferredAuthentications publickey 替换gitl…...

FL Studio21.2中文版多少钱?值得下载吗
水果,全称Fruity Loop Studio,简称FL Studio。是一款全能的音乐制作软件,经过二十多年的演化更迭,其各项功能非常的先进。其开创性的Pat\song模式,也为初学者的学习提供了便利。那么水果音乐制作软件需要多少钱呢&…...

软考系统架构师知识点集锦三:软件架构设计
一、考情分析 二、考点精讲 2.1软件架构的概念 2.1.1什么是架构(暂无定论) 架构设计就是需求分配,即将满足需求的职责分配到组件上。 软件架构风格是描述某-特定应用领域中系统组织方式的惯用模式。架构风格定义-个系统家族,即一个体系结构定义一个词汇表和一组约…...

docker - window Docker Desktop升级
文章目录 前言docker - window Docker Desktop升级 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来…...

Element UI + Vue 新增和编辑共用表单校验无法清除问题(已解决)
问题描述 在新增和编辑过程中大部分情况下 两个表单是一致的,而且编辑也有回显需要,所有绝大多数情况下 都是一个表单两个用处,但是随之而来出现了一个无法清除校验的问题,在先点击编辑后再点击新增会出现校验红字: …...

FL Studio21最新中文汉化解锁版,2024怎么激活FL Studio
FL Studio2024最新中文汉化解锁版是一款功能强大的数字音频工作站(DAW),它广泛应用于音乐创作和音乐制作领域。在使用FL Studio时,购买正版软件是否有必要呢?本文将详细探讨FL Studio的功能特点以及正版软件的重要性。…...

Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法
相信很多使用macOS系统的小伙伴都收到过提示“磁盘空间已满”消息,尤其是采用SSD固态硬盘的MacBook系列,120G的硬盘空间本就捉襟见肘,使用一段时间后,即使自己没有存放很多大文件, Mac的磁盘很快就满了。那么ÿ…...
论文阅读(一)城市干道分段绿波协调控制模型研究
[1]酆磊,赵欣,李林等.城市干道分段绿波协调控制模型研究[J].武汉理工大学学报(交通科学与工程版),2021,45(06):1034-1038. 主要内容:该文介绍了基于绿波带宽和关联度的城市干道分段绿波协调控制模型。通过将主干道划分为不同子区域,并根据路段特点进行精准化控制,实现了分段…...

k8s 部署nginx前端
1.构建docker镜像,k8s拉取镜像运行docker自己安装 [rootmaster1 ~]# docker pull nginx:1.24.0 [rootmaster1 ~]# mkdir k8s-nginx [rootmaster1 ~]# cd k8s-nginx [rootmaster1 k8s-nginx]# vim nginx.conf server_tokens off;server {listen 8010; #web访…...
ClickHouse UDF 官方示例Example报错解决方案
目录 一、环境版本二、官方示例三、解决方案1.Python脚本运行缺少权限2. 缺少Python3运行环境 四、参考借鉴 一、环境版本 环境版本docker clickhouse22.3.10.22 docker pull clickhouse/clickhouse-server:22.3.10.22二、官方示例 官网文档 test_function使用 XML 配置创建…...
eval()函数的用法,计算字符串中的值,模板字符串进行计算
eval函数的定义: eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。 如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。 let a1 10; let a2 20; let calcu…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...