欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

三种C/C++创建文件夹和路径的方法

程序员文章站 2022-06-14 15:44:05
...


这个博客主要转载自:三种C/C++创建文件夹的方法
在做调试时候,有的时候需要批量输出中间结果和数据,放到其他环境下处理,或者和别人的工作对接。这时候需要以文件的形式保存一些数据,有的时候数据分类严格的话就要按照文件夹组织数据。创建文件夹的三种常用方式如下:(其中本人选择了第二种)

第一种:MFC封装好的接口函数

PathIsDirectory //判断是否存在
//-----------------------		我是分界线		------------
::CreateDirectory //创建

例如:

	#include "shlwapi.h"
	#pragma comment(lib,"shlwapi.lib")
	#include <afx.h>
//------------------	我是分界线	-----------------
	CString path = "../../../STL/stl2";
	if (!PathIsDirectory(path)) {
		::CreateDirectory(path, 0);
	}

//这种方法没测试,不知道。有测试过的小兄弟可以评论一下。应该也是很好用的,但是毕竟没有用过几次MFC。

第二种:编写C/C++函数实现该功能

例如:

#include <io.h>
#include <direct.h>
#define PATH_DELIMITER '\\'
//-----------------------	我是分界线	-------------------------
bool createDirectory(const std::string folder) {
	std::string folder_builder;
	std::string sub;
	sub.reserve(folder.size());
	for (auto it = folder.begin(); it != folder.end(); ++it) {
		//cout << *(folder.end()-1) << endl;
		const char c = *it;
		sub.push_back(c);
		if (c == PATH_DELIMITER || it == folder.end() - 1) {
			folder_builder.append(sub);
			if (0 != ::_access(folder_builder.c_str(), 0)) {
				// this folder not exist
				if (0 != ::_mkdir(folder_builder.c_str())) {
					// create failed
					return false;
				}
			}
			sub.clear();
		}
	}
	return true;
}

很好用,多个文件夹级联也能一次创建完成。如在A目录下创建:“FileA\FileB\FileC”的连续三个有包含关系的文件夹路径。可以一次通过,直接在参数里扔进去路径即可。

第三种:调用DOS命令

这也是我最先想到的方法,简单。但是在使用时候发现问题:当文件夹名包含空格等字符时候,就不能正常创建文件夹。不推荐广泛使用,临时用一下是可以的。

#include <stdlib.h>
//--------------------		我是分界线		---------------------
system("md stl2");

多个级联的路径也可以一次创建成功。