首页 > 其他分享 >静态库封装之ComDir类

静态库封装之ComDir类

时间:2024-10-31 20:21:29浏览次数:1  
标签:strCreate string 静态 strCoplete strDirPath 封装 ComDir return

ComDir.h


/*
@author:EricsT
@data:20241031
@version:V1.0
@history:
	@author @data @version @content
	EricsT 20241031 V1.0 新增ComDir类[判断存在性以及创建目录]
*/

#pragma once

#include <string>
#include <fstream>
using namespace std;

class ComDir
{
public:

	/*
	func:判断文件夹是否存在
	@strDirPath:文件夹路径
	@csDirPath:文件夹路径
	@pchDirPath:文件夹路径
	ret:存在true,不存在false
	*/
	static bool isDirExists(string strDirPath);
	static bool isDirExists(CString csDirPath);
	static bool isDirExists(PCHAR pchDirPath);

	/*
	func:创建文件夹
	@strDirPath:文件夹路径
	@csDirPath:文件夹路径
	@pchDirPath:文件夹路径
	ret:创建成功true,创建失败false
	*/
	static bool creatDir(string strDirPath);
	static bool creatDir(CString csDirPath);
	static bool creatDir(PCHAR pchDirPath);

};

ComDir.cpp


/*
@author:EricsT
@data:20241031
@version:V1.0
*/

#include "stdafx.h"
#include "ComDir.h"
#include <io.h>
#include <sys/stat.h>
#include <direct.h>


bool ComDir::isDirExists(string strDirPath)
{
	if (!access(strDirPath.c_str(), 0))//判断路径是否存在
		return false;

	struct stat status;

	stat(strDirPath.c_str(), &status);//获取状态变量

	if (status.st_mode & S_IFDIR)//取模式判断是否是目录
		return true;

	return false;
}

bool ComDir::isDirExists(CString csDirPath)
{
	//CStringToString
	int len = csDirPath.GetLength();
	PCHAR pch = new char[len + 1];
	size_t pchSize = wcstombs(pch, csDirPath, len + 1);

	if (pchSize == wstring::npos)
	{
		delete pch;
		return "";
	}

	string strDirPath(pch);

	delete pch;

	if (!access(strDirPath.c_str(), 0))
		return false;

	struct stat status;

	stat(strDirPath.c_str(), &status);

	if (status.st_mode & S_IFDIR)
		return true;

	return false;
}

bool ComDir::isDirExists(PCHAR pchDirPath)
{
	if (!access(pchDirPath, 0))
		return false;

	struct stat status;

	stat(pchDirPath, &status);

	if (status.st_mode & S_IFDIR)
		return true;

	return false;
}

bool ComDir::creatDir(string strDirPath)
{
	string strCreate = strDirPath;
	string strCoplete = strDirPath.substr(0, 2);//取系统盘

	strCreate = strCreate.substr(3);//除去系统盘之后的路径

	while (true)
	{
		size_t iPos = strCreate.find('\\');

		strCoplete += '\\' + strCreate.substr(0, iPos);//按层级取目录

		if (-1 == _access(strCoplete.c_str(), 0)) //判断该目录是否存在
		{
			if (0 != _mkdir(strCoplete.c_str()))//不存在就创建目录
				return false;
		}

		if (strCreate.npos == iPos)//最后一级目录
			break;

		strCreate = strCreate.substr(iPos + 1);
	}

	return true;
}

bool ComDir::creatDir(CString csDirPath)
{
	//CStringToString
	int len = csDirPath.GetLength();
	PCHAR pch = new char[len + 1];
	size_t pchSize = wcstombs(pch, csDirPath, len + 1);

	if (pchSize == wstring::npos)
	{
		delete pch;
		return "";
	}

	string strDirPath(pch);

	delete pch;

	string strCreate = strDirPath;
	string strCoplete = strDirPath.substr(0, 2);

	strCreate = strCreate.substr(3);

	while (true)
	{
		size_t iPos = strCreate.find('\\');

		strCoplete += '\\' + strCreate.substr(0, iPos);

		if (-1 == _access(strCoplete.c_str(), 0))
		{
			if (0 != _mkdir(strCoplete.c_str()))
				return false;
		}

		if (strCreate.npos == iPos)
			break;

		strCreate = strCreate.substr(iPos + 1);
	}

	return true;
}

bool ComDir::creatDir(PCHAR pchDirPath)
{
	string strDirPath(pchDirPath);
	string strCreate = strDirPath;
	string strCoplete = strDirPath.substr(0, 2);

	strCreate = strCreate.substr(3);

	while (true)
	{
		size_t iPos = strCreate.find('\\');

		strCoplete += '\\' + strCreate.substr(0, iPos);

		if (-1 == _access(strCoplete.c_str(), 0))
		{
			if (0 != _mkdir(strCoplete.c_str()))
				return false;
		}

		if (strCreate.npos == iPos)
			break;

		strCreate = strCreate.substr(iPos + 1);
	}

	return true;
}

在VS编译器内会报C4996错误,解决见下文:

C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 博客园 (cnblogs.com)

标签:strCreate,string,静态,strCoplete,strDirPath,封装,ComDir,return
From: https://www.cnblogs.com/EricsT/p/18518802

相关文章

  • 用哈希表封装myunordered_map和myunordered_set
    在学习这个之前,已经学习过,myunordered_map和myunordered_set的基本用法和哈希表怎么用哈希思想模拟实现;因此为了更深入的了解myunordered_map和myunordered_set与哈希表的内容,我们来自己用哈希表模拟实现myunordered_map和myunordered_set;这种模拟实现和之前模拟实现map与set......
  • 牛客网刷题(4)(Java之(static)静态变量、静态方法、静态代码块、静态内部类)
    目录一、static关键字。(1)牛客网题目。(2)总结。<1>静态变量。(类变量)1、特点。2、补充与注意。3、代码演示。<2>静态方法1、特点。2、补充与注意。3、代码演示。<3>静态代码块。1、特点。2、补充与注意。3、代码演示。<4>静态内部类。1、特点。2、注意事项。3......
  • webMagic静态页面的爬取
     一:javamaven依赖:<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.4</version></dependency><dependency><groupId>us.codecraft</grou......
  • SOT89-5 的标准封装
    AP5165B是一款外围电路简单的连续电流模式的降压型LED恒流驱动芯片。在输入电压高于LED电压时,可以有效地用于驱动一颗或者多颗串联LED。输出电流可调,大可达1A。适用于3-36V电压范围的非隔离式恒流LED驱动领域。AP5165B内置功率开关和一个高端电流检测电路,可以使用外部......
  • 【GiraKoo】面向对象开发系列之【封装】
    【技术分享】面向对象开发系列之【封装】理解封装是面向对象程序开发的基石。程序开发,最核心价值,是数据。程序其实是读取数据,操作数据,保存数据等一系列操作。那么经过良好组织过的数据,将使编程事半功倍。高内聚,低耦合说到数据,经常挂在嘴边的,就是这句高内聚,低耦合了。这并......
  • vue中封装一个弹窗
    vue3父元素<template><divclass="app"><some-modalv-model:visible="modalVisible"/></div></template><scriptsetup>import{ref}from"vue";importSomeModalfrom"@/compone......
  • MKV视频封装软件 MKVToolNix v88.0 中文便携版
    由MoritzBunkus精心打造的MKVToolNix,是一款开源且功能丰富的Matroska视频文件编辑器。这款软件不仅是MKV处理工具的集合,更是字幕组、电影电视剧论坛和视频工作者的得力助手。MKVToolNix支持跨平台操作,几乎兼容所有主流操作系统,能够将多种视频编码、多达16条音频和不同语言的字......
  • 【Nginx学习】5步轻松搞定:用Nginx配置一个静态Web服务器,文件路径定义你真的会了吗?
    ......
  • 鸿蒙接口封装
    ts接口封装代码:    request.tsimportpromptfrom'@system.prompt'importhttpfrom'@ohos.net.http';exportdefault(methods:string,uri:string,params:object,success:Function)=>{consthttpRequest=http.createHttp();co......
  • C#钉钉群机器人封装
    1打开群设置>智能群助手>添加机器人>自定义 2我选择的是加签的方法,其他的比较简单。  3只需要按照需求传入对应的参数即可,当然如果没有加签可以不传签名publicstaticclassDingTalkRobot{///<summary>///发送消息///</sum......