You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中创建不存在的文件夹?多级目录如何创建?

在C++中创建不存在的目录(含多层级目录)

没问题!不管是单个缺失的目录(比如你代码里的myFiles),还是嵌套多层的路径,都完全可以通过C++代码来创建。下面我分场景给你讲清楚最优的实现方式:

1. 优先推荐:使用C++17的<filesystem>库(跨平台)

从C++17开始,标准库引入了<filesystem>模块,这是处理文件系统操作的最佳选择——跨平台(Windows/Linux/macOS都能用),代码简洁,不用自己处理平台差异。

单层级目录创建(比如仅创建c:\myFiles)

如果只需要创建单个缺失的目录,可以用create_directory函数,它只会创建最后一级目录(如果父目录不存在会失败):

#include <filesystem>
#include <cstdio>

namespace fs = std::filesystem; // 简化命名

int main() {
    const fs::path dir_path = "c:\\myFiles";
    
    // 先检查目录是否存在
    if (!fs::exists(dir_path)) {
        bool is_created = fs::create_directory(dir_path);
        if (is_created) {
            printf("目录创建成功!\n");
        } else {
            printf("目录创建失败(可能是权限不足等原因)\n");
        }
    }

    // 之后再打开文件
    FILE *fIn = fopen("c:\\myFiles\\andrea.txt", "r");
    // ...后续文件操作
    if (fIn) fclose(fIn);
    
    return 0;
}

多层级目录创建(比如c:\myFiles\docs\notes)

如果路径包含多个层级的目录(比如父目录也不存在),用create_directories函数——它会递归创建所有缺失的目录,不用你手动一层层处理:

#include <filesystem>
#include <cstdio>

namespace fs = std::filesystem;

int main() {
    const fs::path multi_dir = "c:\\myFiles\\docs\\notes";
    
    if (!fs::exists(multi_dir)) {
        bool is_created = fs::create_directories(multi_dir);
        if (is_created) {
            printf("多层级目录创建成功!\n");
        } else {
            printf("创建失败,请检查权限或路径合法性\n");
        }
    }

    // 后续操作...
    return 0;
}

2. 兼容旧C标准(C11/C++14):平台特定实现

如果你的项目必须兼容C++17之前的标准,那就需要用平台特定的API或者自己写递归创建逻辑:

Windows平台(使用Win32 API)

可以调用CreateDirectoryA函数,配合递归逻辑处理多层路径:

#include <windows.h>
#include <string>
#include <cstdio>

bool CreateMultiDirectory(const std::string& path) {
    std::string temp_path;
    for (char c : path) {
        temp_path += c;
        // 遇到路径分隔符时,先创建当前层级的目录
        if (c == '\\') {
            if (!CreateDirectoryA(temp_path.c_str(), NULL)) {
                DWORD err = GetLastError();
                if (err != ERROR_ALREADY_EXISTS) {
                    return false;
                }
            }
        }
    }
    // 创建最后一级目录
    if (!CreateDirectoryA(path.c_str(), NULL)) {
        DWORD err = GetLastError();
        if (err != ERROR_ALREADY_EXISTS) {
            return false;
        }
    }
    return true;
}

int main() {
    if (CreateMultiDirectory("c:\\myFiles\\andrea\\docs")) {
        printf("多层目录创建成功!\n");
        FILE *fIn = fopen("c:\\myFiles\\andrea\\docs\\andrea.txt", "r");
        if (fIn) fclose(fIn);
    } else {
        printf("创建失败\n");
    }
    return 0;
}

Linux/类Unix平台(使用POSIX API)

用mkdir函数配合递归逻辑,处理多层路径:

#include <sys/stat.h>
#include <errno.h>
#include <string>
#include <cstdio>

bool CreateMultiDirectory(const std::string& path) {
    // 尝试创建当前目录
    if (mkdir(path.c_str(), 0755) == 0) {
        return true;
    }
    switch (errno) {
        case ENOENT:
            // 父目录不存在,先创建父目录
            size_t pos = path.find_last_of('/');
            if (pos == std::string::npos) {
                return false; // 找不到父目录,路径非法
            }
            // 递归创建父目录
            if (CreateMultiDirectory(path.substr(0, pos))) {
                // 父目录创建成功后,再创建当前目录
                return mkdir(path.c_str(), 0755) == 0;
            }
            return false;
        case EEXIST:
            // 目录已存在,视为成功
            return true;
        default:
            // 其他错误(比如权限不足)
            return false;
    }
}

int main() {
    if (CreateMultiDirectory("/home/user/myFiles/docs/notes")) {
        printf("多层目录创建成功!\n");
        // 后续文件操作...
    } else {
        printf("创建失败\n");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者user9432978

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:29:52