详解C++ 创建文件夹的四种方式

在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥。因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式:

貌似都是 Windows 的

提前说明:从参数角度上看,其实都应该使用 char*,但是为了方便这里使用的都是 string。在 SO 上找到一个方式把 string 转成 char*,就是调用 string 的 c_str() 函数。

本文示例都是在 E:\database 路径下创建一个叫做 testFolder 的文件夹。

使用 system() 调用 dos 命令

#include <iostream>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    string command;
    command = "mkdir -p " + folderPath;
    system(command.c_str());

    return 0;
}

使用头文件 direct.h 中的 access 和 mkdir 函数

关于 direct.h 我觉得 维基百科上介绍的不错

#include <direct.h>
#include <iostream>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    if (0 != access(folderPath.c_str(), 0))
    {
        // if this folder not exist, create a new one.
        mkdir(folderPath.c_str());   // 返回 0 表示创建成功,-1 表示失败
        //换成 ::_mkdir  ::_access 也行,不知道什么意思
    }

    return 0;
}

调用 Windows API 函数

#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    if (!GetFileAttributesA(folderPath.c_str()) & FILE_ATTRIBUTE_DIRECTORY) {
        bool flag = CreateDirectory(folderPath.c_str(), NULL);
        // flag 为 true 说明创建成功
    } else {
        cout<<"Directory already exists."<<endl;
    }

    return 0;
}

调用 MFC 封装好的接口函数

不推荐此方法,出错的话会有点麻烦。

#include <iostream>
#include <shlwapi.h>
using namespace std;

int main()
{
    string folderPath = "E:\\database\\testFolder"; 

    if (!PathIsDirectory(folderPath.c_str()))  // 是否有重名文件夹
    {
        ::CreateDirectory(folderPath.c_str(), 0);
    }

    return 0;
}

如果你出现了错误 undefined reference to imp__PathIsDirectory @ 4,可以参考 undefined reference to imp PathIsDirectory
下面的方法是基于你详细阅读完上述链接后的前提下给出的

说我在 CodeBlocks 下解决该问题的方法:
第一步:在项目上右击,选择 Build Options

第二步: 在 Linker Settings 里添加 libshlwapi.a 文件

到此这篇关于C++ 创建文件夹的四种方式的文章就介绍到这了,更多相关C++ 创建文件夹内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++实现读取特定路径下文件夹及文件名的方法

    本文所述实例代码主要实现读取给定路径下的所有文件夹名称或所有带后缀的文件名的功能.具体解决方法如下:   主要用到了以下几个头文件(类):io.h, fstream, string.   首先,读取某给定路径下所有文件夹与文件名称,并带完整路径.实现代码如下: void getAllFiles( string path, vector<string>& files) { //文件句柄 long hFile = 0; //文件信息 struct _finddata_t fileinfo;

  • C++删除指定文件夹下N天及之前日志文件的方法

    本文实例讲述了C++删除指定文件夹下N天及之前日志文件的方法.分享给大家供大家参考.具体如下: // 功能:删除nDays天及之前的日志文件 // @nDays: 0-不删除日志,3-删除3天及之前的日志(保留今天.昨天.前天的日志) ... void CRecordLog::ClearLog(UINT nDays) // 删除N天前的日志 { if (nDays > 0) { WIN32_FIND_DATA FindFileData; CString sAllFile = m_sLogFold

  • C++遍历文件夹获取文件列表

    本文实例类似遍历一个文件夹然后获得该文件夹下的文件列表,可以随意切换文件目录,本来是用在我们小组写的简易ftp服务器上的一个给客户端显示的一个小插件,总之单拿出来应该没啥含量,调用了windows的一些API. 实例代码: #include<iostream> #include<stdlib.h> #include<windows.h> #include<fstream> #include<stdio.h> #include<vector&

  • VC++ 使用 _access函数判断文件或文件夹是否存在

    _access函数 int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ); 参数 path 文件或目录路径. mode 读/写特性. 返回值   如果文件包含特定模式,每个函数返回 0. 函数返回 - 1,则名称文件不存在或不具有特定模式:在这种情况下,如下表errno 所示设置. EACCES 访问被拒绝:文件权限的设置不允许指定的访问权限. ENOENT 未找到文件名或

  • C++选择文件夹代码的封装

    本文实例讲述了C++选择文件夹代码的封装,分享给大家供大家参考.具体方法如下: 该实例分为DirDialog.h头文件与DirDialog.cpp源文件. DirDialog.h头文件代码如下: 复制代码 代码如下: #pragma once  #ifndef __DIRDIALOG_H_HH  #define __DIRDIALOG_H_HH #include <Shlobj.h> class CDirDialog  {  protected:      BROWSEINFO m_bi; 

  • C++遍历文件夹下文件的方法

    本文实例讲述了C++遍历文件夹下文件的方法.分享给大家供大家参考.具体如下: #include <windows.h> #include <stdio.h> #include <string.h> #define LEN 1024 // 深度优先递归遍历目录中所有的文件 BOOL DirectoryList(LPCSTR Path) { WIN32_FIND_DATA FindData; HANDLE hError; int FileCount = 0; char Fi

  • 详解C++ 创建文件夹的四种方式

    在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥.因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式: 貌似都是 Windows 的 提前说明:从参数角度上看,其实都应该使用 char*,但是为了方便这里使用的都是 string.在 SO 上找到一个方式把 string 转成 char*,就是调用 string 的 c_str() 函数. 本文示例都是在 E:\database 路径下创建一个叫做 t

  • 详解FileInputStream读取文件数据的两种方式

    FileInputStream(文件字节读取流): read():一个一个字节的读 read(byte[] buf):先把字节存入到缓冲区字节数组中,一下读一个数组(常用) import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; public class FileIn

  • 详解ftp创建文件权限问题

    详解ftp创建文件权限问题 一.问题 有一个这样的需求,admin为一个Linux为其FTP应用创建的一个有权限限制的用户,通过admin用户可以进行登录FTP服务,登录FTP服务后,创建文件夹,该文件夹的用户和用户组都是admin,属性为755,即只有admin用户才有写的权限,但是,FTP后台是通过b用户登录linux系统执行程序上传文件到FTP服务器,由于FTP服务器的文件夹都是由admin用户创建的,且属性为755,b用户根本没有写的权限,导致程序上传文件失败. 二.分析 那么解决问题的

  • 详解Python实现字典合并的四种方法

    目录 1.用for循环把一个字典合并到另一个字典 2.用dict(b, **a)方法构造一个新字典 3.用b.update(a)的方法,更新字典 4.把字典转换成列表合并后,再转换成字典 (1)利用a.items().b.items()把a.b两个字典转换成元组键值对列表 (2)合并列表并且把合并后的列表转换成字典 5.实例,netmiko使用json格式的数据进行自动化操作 (1)json格式的处理 (2)json格式的设备信息列表 (3)netmiko读取json类型信息示例 1.用for循

  • 详解Vue 单文件组件的三种写法

    JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default class Cpn extends Vue{ counter = 0 //data add(){ //methods this.counter += 1 } } TS class写法 @Component export default class Cpn extends Vue{ @Prop(Number) sum : number

  • 详解Mybatis多参数传递入参四种处理方式

    1.利用参数出现的顺序 利用mapper.xml <select id="MutiParameter" resultType="com.jt.mybatis.entity.User"> select * from user where id = #{param1} and username = #{param2} </select> 利用mybatis注解方式(sql语句比较简单时推荐此方式) @Select("select * f

  • 详解java连接mysql数据库的五种方式

    第一种方式:将用户名和密码封装在Properties类中 首先,导入数据库连接包这个是毋庸置疑的.创建一个jdbc驱动dirver.将数据库(以MySQL为例)的url保存在所创建的字符串url中.如果mysql版本低于8.0,则url保存形式应该为: String url = "jdbc:mysql://localhost:3306/test" 如果mysql版本为8.0版本或以上,url保存形式为: String url = "jdbc:mysql://localhost

  • 详解Redis集群搭建的三种方式

    一.单节点实例 单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个 Redis 还是很轻松的,做为一个 key/value 数据库也是可以胜任的 二.主从模式(master/slaver) redis 主从模式配置 主从模式: redis 的主从模式,使用异步复制,slave 节点异步从 master 节点复制数据,master 节点提供读写服务,slave 节点只提供读服务(这个是默认配置,可以通过修改配置文件 slave-read-only 控制).master

  • 详解Nginx 虚拟主机配置的三种方式(基于IP)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于端口) https://www.jb51.net/article/14977.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 1.基于IP的虚拟主机配置 如果同一台服务器有多个IP,可以使用基于IP的虚机主机配置,将不同的服务绑定在不同的IP上. 1.1

  • 详解Nginx 虚拟主机配置的三种方式(基于端口)

    Nginx配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置. 详解Nginx 虚拟主机配置的三种方式(基于IP) https://www.jb51.net/article/14974.htm 详解Nginx 虚拟主机配置的三种方式(基于域名) https://www.jb51.net/article/14978.htm 2.Nginx基于端口的虚拟主机配置 如一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配

随机推荐