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

时间:2022-03-08 22:12:51

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

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

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

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

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

原文链接:https://blog.csdn.net/sinat_41104353/article/details/83149441