【C/C++】创建文件夹
在 C/C++ 中,在指定目录下创建 log
文件夹可以通过以下方法实现:
方法 1:C++17 使用 <filesystem>
(推荐)
#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 语言(跨平台,需手动处理)
#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 需设置权限
#endifint 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:系统命令(简单但不安全)
#include <cstdlib>int main() {system("mkdir -p /path/to/your/directory/log"); // Linux/macOS// system("mkdir \"C:\\path\\to\\your\\directory\\log\""); // Windowsreturn 0;
}
缺点:
- 依赖系统 shell,存在注入风险(如路径含特殊字符)。
- 不推荐在生产代码中使用。
关键点总结
- 权限问题:
- Linux/macOS 需设置权限(如
0755
)。 - Windows 需确保目标目录可写。
- Linux/macOS 需设置权限(如
- 路径分隔符:
- C++17 的
filesystem
自动处理。 - C 语言需手动处理(Windows 用
\
,Linux 用/
)。
- C++17 的
- 错误处理:
- 检查目录是否已存在(避免重复创建)。
- 捕获异常(C++)或检查返回值(C)。
根据项目需求选择合适的方法!