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)