当前位置: 首页 > news >正文

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目录。

http://www.lryc.cn/news/208317.html

相关文章:

  • Golang 继承
  • 棋盘格测距-单目相机(OpenCV/C++)
  • 031-从零搭建微服务-监控中心(一)
  • vue中使用xlsx插件导出多sheet excel实现方法
  • Linux - 进程的优先级 和 如何使用优先级调度进程
  • 支持控件drag和click
  • AIR101 LuatOS LVGL 显示多个标签例程
  • Istio实战(七)- Bookinfo 部署
  • 出差学小白知识No5:|Ubuntu上关联GitLab账号并下载项目(ssh key配置)
  • FL Studio21.2中文版多少钱?值得下载吗
  • 软考系统架构师知识点集锦三:软件架构设计
  • docker - window Docker Desktop升级
  • Element UI + Vue 新增和编辑共用表单校验无法清除问题(已解决)
  • FL Studio21最新中文汉化解锁版,2024怎么激活FL Studio
  • Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法
  • 论文阅读(一)城市干道分段绿波协调控制模型研究
  • k8s 部署nginx前端
  • ClickHouse UDF 官方示例Example报错解决方案
  • eval()函数的用法,计算字符串中的值,模板字符串进行计算
  • leetcode第80题:删除有序数组中的重复项 II
  • 【Docker】Docker-Compose内置DNS负载均衡失效问题
  • [Python]Selenium-自动化测试
  • 高效管理文件夹名称:如何批量修改指定多样化的文件夹名称
  • c 读取音频协议WAV文件头(再生成wav文件)
  • Prompt设计与大语言模型微调
  • 修复VS2015没有代码提示的问题【已解决】
  • DeepSpeed: 大模型训练框架 | 京东云技术团队
  • 暄桐推荐|学书法的必读书目
  • 2023年赋能更多的人
  • 量子计算与量子密码(入门级)