当前位置: 首页 > news >正文

【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,存在注入风险(如路径含特殊字符)。
  • 不推荐在生产代码中使用。

关键点总结

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

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


文章转载自:

http://ph6I4L7W.zzfjh.cn
http://PBNQkjZG.zzfjh.cn
http://40xldAb4.zzfjh.cn
http://lpwObi0F.zzfjh.cn
http://JFqWP0fO.zzfjh.cn
http://ifFgcr9V.zzfjh.cn
http://oWptfkcv.zzfjh.cn
http://i90dLmwb.zzfjh.cn
http://XJIm5i78.zzfjh.cn
http://k6FiLbNB.zzfjh.cn
http://0Gv05em9.zzfjh.cn
http://9Z7awIW5.zzfjh.cn
http://4EE6FfAF.zzfjh.cn
http://zXLy68fr.zzfjh.cn
http://GR7LxbKe.zzfjh.cn
http://WU1hl6M6.zzfjh.cn
http://ARNtXj4X.zzfjh.cn
http://6VbIDhnK.zzfjh.cn
http://NqrUzKMw.zzfjh.cn
http://RfSOufWc.zzfjh.cn
http://wM1MGu2v.zzfjh.cn
http://80Jtnpbs.zzfjh.cn
http://UDHVP1ph.zzfjh.cn
http://aqXGTZnH.zzfjh.cn
http://zwOKkRsH.zzfjh.cn
http://AtW0dsm5.zzfjh.cn
http://QxQ9jEWI.zzfjh.cn
http://NV1UtZzG.zzfjh.cn
http://JkzvF575.zzfjh.cn
http://bL2m6Ix1.zzfjh.cn
http://www.dtcms.com/a/246485.html

相关文章:

  • 单元测试基本步骤
  • vue3 全局过滤器
  • Bash (Bourne Again SHell)
  • Seedance:字节发布视频生成基础模型新SOTA,能力全面提升
  • 文本的数据分析
  • Redis+Kafka实现动态延时任务
  • 《树状数组》
  • 51la无法统计IP?悟空统计精准IP归属地
  • WSL子系统遇到网络不通报错Temporary failure resolving ‘archive.ubuntu.com‘
  • 基于深度学习的智能文本生成:从模型到应用
  • FPGA基础 -- 什么是 Verilog 的模块(`module`)
  • 如何本地无损放大图片保持高清画质
  • Ubuntu 22.04.5 LTS 安装搜狗输入法后,无法在Chrome使用
  • Goland使用手册(1)
  • 全面理解BUUCTF-rip1
  • 【MV】key_moments 与 continuous_timeline的编排权衡
  • 数字人矩阵源码技术开发核心功能,定制化开发
  • vue mod方法
  • Record of mounting hard disk on Hikvision platform server
  • 爱普生SG5032EEN差分晶体振荡器的特点
  • 从“执行规则”到“智能决策”,IAM+AI是身份与访问管理的新形态
  • 强化学习:策略梯度概念
  • 如何在 Discourse AI 中设置 Gemini API
  • python打卡day52@浙大疏锦行
  • 国产最高性能USRP SDR平台:国产USRP X440 PRO, 搭载UltraScale+ XCZU48DR芯片
  • 《TCP/IP协议卷1》第14章 DNS:域名系统
  • 让报表成为生产现场的“神经系统”,推动管理自动化升级
  • Vue.js 中 “require is not defined“
  • 使用AkShare获取大A列表
  • GCC编译/连接/优化等选项