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

C++编程 同时被 2 个专栏收录
12 篇文章 0 订阅
5 篇文章 0 订阅

创建路径并打开文件

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

使用非MFC函数。

#include  <io.h> //_access fun
#include <direct.h> //_mkdir fun

BOOL isFolderExist(char * folder)
{
	int ret = 0;

	ret = _access(folder, 0);
	if (ret == 0)
		ret = TRUE;
	else
		ret = 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( const char *dirname );

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

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

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

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

 

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


#include <windows.h>
#define  FILENAME_MAX 260

int 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++创建文件夹的四种方法,请参考自:https://blog.csdn.net/sinat_41104353/article/details/83149441

  • 0
    点赞
  • 0
    评论
  • 19
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值