在C++中创建文件夹

Creating folders in C++

本文关键字:文件夹 创建 C++      更新时间:2023-10-16

我最近开始在C++工作,当我必须在执行代码时创建一个目录时遇到了这种情况。当我必须创建一个文件夹时,代码工作正常,但是当我必须在这个新创建的文件夹中创建另一个文件夹时,代码会失败。

假设我在C:,想将我的文件存储在C:/A/B/中。如果我必须将文件存储在C:/A/中,则使用以下mkdir()代码可以正常工作,但是当我添加另一个文件夹B时失败。

以下是我的代码片段:

#include <sys/stat.h>
#include <string>
using namespace std;
int main()
{
string stringpath = "C:/A/B/"; 
int status = mkdir(stringpath.c_str(),0777);
if(status!=0)
{
//.....
}
else
{
//....
}
}

有人可以帮助我创建这个目录,我可以在父目录中拥有任意数量的文件夹吗?(P.S:我添加了头文件sys/stat.h,iostream和字符串(

这是您在 C++17 中执行此操作的方式:

#include <filesystem>
namespace fs = std::filesystem;
fs::create_directories("./a/b/c")

mkdir()仅创建指定路径的最后一个组件。在您的示例中,它将仅创建B.如果任何父目录不存在(即,如果A不存在(,则该函数将失败,并显示ENOENT。 您需要拆分路径并为路径中的每个中间目录调用mkdir(),同时忽略EEXIST错误。

status = mkdir("C:/A/", 0777);
if ((status < 0) && (errno != EEXIST)) ...
status = mkdir("C:/A/B/", 0777);
if ((status < 0) && (errno != EEXIST)) ...

如果您不想手动处理此问题,请使用为您处理它的包装器,例如 Boost 的create_directories()函数:


bool create_directories(const path& p);bool create_directories(const path& p, system::error_code& ec);

效果:通过为不存在的任何p元素调用create_directory()来建立后置条件。

后置条件:is_directory(p)

返回:如果创建了新目录,则为 true,否则为 false。

抛出:如错误报告中指定的那样。

复杂性:O(n+1)其中n是不存在的p元素的数量。

您可以调用以下内容:

string stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);

如果C:/A/目录存在。如果不存在,请执行以下操作:

string stringpath = "C:/A/";
int status = mkdir(stringpath.c_str(),0777);
stringpath = "C:/A/B/";
int status = mkdir(stringpath.c_str(),0777);

在 C++11 中,您可以使用实验函数:

#include <experimental/filesystem>
...
std::stringstream bufH;
bufH << dirName << fName;
if (!std::experimental::filesystem::exists(bufH.str()))
{
std::experimental::filesystem::create_directories(bufH.str());
}

尝试像这样的八进制标志 7777 以获得创建此文件夹所需的所有权限。

int status = mkdir(stringpath.c_str(), 7777);

或者在 A 文件夹中做一个 chmod,如下所示: CHMOD -R 7777 *