【C/C++】创建文件夹

在 C/C++ 中,在指定目录下创建 log 文件夹可以通过以下方法实现:


方法 1:C++17 使用 <filesystem>(推荐)

cpp 复制代码
#include <filesystem>
#include <iostream>

namespace fs = std::filesystem; // C++17 起支持

int main() {
    std::string targetDir = "/path/to/your/directory"; // 替换为你的目标目录
    fs::path logDir = fs::path(targetDir) / "log";     // 拼接路径

    try {
        if (!fs::exists(logDir)) {
            fs::create_directory(logDir); // 创建文件夹
            std::cout << "成功创建 log 文件夹: " << logDir << std::endl;
        } else {
            std::cout << "log 文件夹已存在: " << logDir << std::endl;
        }
    } catch (const fs::filesystem_error& e) {
        std::cerr << "错误: " << e.what() << std::endl;
    }

    return 0;
}

优点

  • 跨平台(Windows/Linux/macOS)。
  • 自动处理路径分隔符(/\)。

编译选项

  • GCC/Clang: -std=c++17 -lstdc++fs
  • MSVC: /std:c++17

方法 2:C 语言(跨平台,需手动处理)

c 复制代码
#include <stdio.h>
#include <sys/stat.h>  // mkdir (POSIX)
#include <direct.h>    // _mkdir (Windows)

#ifdef _WIN32
    #define MKDIR(dir) _mkdir(dir)
#else
    #define MKDIR(dir) mkdir(dir, 0755) // Linux/macOS 需设置权限
#endif

int main() {
    const char* targetDir = "/path/to/your/directory"; // 替换为你的目标目录
    char logDir[256];
    snprintf(logDir, sizeof(logDir), "%s/log", targetDir);

    if (MKDIR(logDir) == 0) {
        printf("成功创建 log 文件夹: %s\n", logDir);
    } else {
        perror("创建文件夹失败");
    }

    return 0;
}

注意

  • Windows 使用 _mkdir,Linux/macOS 使用 mkdir
  • 需手动拼接路径,确保目标目录存在。

方法 3:系统命令(简单但不安全)

cpp 复制代码
#include <cstdlib>

int main() {
    system("mkdir -p /path/to/your/directory/log");  // Linux/macOS
    // system("mkdir \"C:\\path\\to\\your\\directory\\log\"");  // Windows
    return 0;
}

缺点

  • 依赖系统 shell,存在注入风险(如路径含特殊字符)。
  • 不推荐在生产代码中使用。

关键点总结

  1. 权限问题
    • Linux/macOS 需设置权限(如 0755)。
    • Windows 需确保目标目录可写。
  2. 路径分隔符
    • C++17 的 filesystem 自动处理。
    • C 语言需手动处理(Windows 用 \,Linux 用 /)。
  3. 错误处理
    • 检查目录是否已存在(避免重复创建)。
    • 捕获异常(C++)或检查返回值(C)。

根据项目需求选择合适的方法!

相关推荐
名字还没想好☜5 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王5 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..8 小时前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光9 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光9 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人9 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
hansang_IR10 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
东东最爱敲键盘10 小时前
day7.c++继承
c++
在世修行11 小时前
从零打造 C# 工业视觉检测系统(七):串口通信 SerialPort 封装与开发
开发语言·c#·modbus rtu·rs232/rs485
沫璃染墨11 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++