700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C++判断路径是否存在 若不存在则创建路径

C++判断路径是否存在 若不存在则创建路径

时间:2020-12-16 18:31:26

相关推荐

C++判断路径是否存在 若不存在则创建路径

创建路径并打开文件

C++中,当需要打开文件时,首先需要判断路径是否存在;若不存在,则需要创建路径。当存在多级路径时,需要依次创建。

使用非MFC函数。

#include <io.h> //_access fun#include <direct.h> //_mkdir funBOOL isFolderExist(char * folder){int ret = 0;ret = _access(folder, 0);if (ret == 0)ret = TRUE;elseret = FALSE;return ret;}int32_t createDirectory(char* directoryPath){uint32_t dirPathLen = 0;if (directoryPath != NULL) {dirPathLen = strlen(directoryPath);}if (dirPathLen > FILENAME_MAX){return -1;}char tmpDirPath[FILENAME_MAX] = { 0 };for (uint32_t i = 0; i < dirPathLen; ++i){tmpDirPath[i] = directoryPath[i];if (tmpDirPath[i] == '\\' || tmpDirPath[i] == '/'){if (!isFolderExist(tmpDirPath)){int ret = _mkdir(tmpDirPath);//BOOL ret = CreateDirectory(tmpDirPath, NULL);if (ret != 0)return -1;}}}return 0;}

其中,主要用到了两个函数,分别是_access()和_mkdir(),这是不依赖MFC的函数。

_access()函数

头文件:<io.h>

函数原型:int _access(const char *pathname, int mode);

参数:pathname 为文件路径或目录路径, mode 为访问权限(在不同系统中可能用不能的宏定义重新定义)。

返回值:如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1。

备注:当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。

当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限。

mode的值和含义如下所示:

00——只检查文件是否存在

02——写权限

04——读权限

06——读写权限

_mkdir()函数

头文件:<direct.h>

函数原型:int _mkdir( constchar *dirname );

参数:dirname是指向目录的路径名指针。

返回值:返回0表示创建目录成功,返回-1表示失败。

备注:只能创建一级目录,即dirname倒数第二级必须是已经存在,否则创建不成功。

因此当有多级目录时,在创建之前,需要检验路径或者文件是否存在,用_access(dirname,0)来检验,返回0表示存在,-1不存在。

测试调用函数为如下所示:

#include <windows.h>#define FILENAME_MAX 260int main(){FILE *gbf = NULL;unsigned char DataDir[FILENAME_MAX] = "D:\\Users\\admin\\Desktop\\MySample";unsigned int SN = 123;char filepath[FILENAME_MAX] = { 0 };SYSTEMTIME sys;GetLocalTime(&sys);sprintf(filepath, "%s\\%d\\Log_%04d%02d%02d_%02d%02d%02d.txt", DataDir, SN, sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond);if (!isFolderExist((char*)filepath)){createDirectory((char*)filepath);}gbf = fopen(filepath, "a");//写文件的各种操作if (gbf != NULL){fclose(gbf);gbf = NULL;}system("pause");return 0;}

另外,C++创建文件夹的四种方法,请参考自:/sinat_41104353/article/details/83149441

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。