跨平台创建文件夹/目录的方法?

6

有没有一种跨平台的方法,可以使用C代码“创建文件夹/目录”?还是说我必须使用预处理器来声明要使用哪种方法?


_mkdir("./newfolder") 可能在 Windows 上运行,但在 Linux 上可能无法正常工作。 - Stan
@Stan 好的。我知道Linux有mkdir("./directory", 0700)。那么在Windows中,我需要使用哪个头文件来实现相同的功能呢? - user6774424
看看 @dbush 的回答。我说的是 _mkdir,不是 mkdir。两者是有区别的 :) - Stan
@Stan 我知道,我只是在表明我知道它的存在 :) - user6774424
在C++中有一种标准的方法来实现这个功能,那么将C++的std::filesystem::create_directory()函数移植到C语言中就是一种标准的方式。 - user16217248
3个回答

7
你需要使用#define来完成这个任务。
为了让你的代码看起来干净整洁,你需要使用一个在编译Windows时将Linux函数定义转换为相应Windows函数的宏。
在你的源文件顶部,你需要在Windows特定的部分添加以下内容:
#include <windows.h>

#define mkdir(dir, mode) _mkdir(dir)

之后你可以通过以下方式调用该函数:

mkdir("/tmp/mydir", 0755);

以下是其他一些可能有用的内容:
#define open(name, ...) _open(name, __VA_ARGS__)
#define read(fd, buf, count) _read(fd, buf, count)
#define close(fd) _close(fd)
#define write(fd, buf, count) _write(fd, buf, count)
#define dup2(fd1, fd2) _dup2(fd1, fd2)
#define unlink(file) _unlink(file)
#define rmdir(dir) _rmdir(dir)
#define getpid() _getpid()
#define usleep(t) Sleep((t)/1000)
#define sleep(t) Sleep((t)*1000)

2
有没有一种跨平台的方法,可以使用C语言“编写代码”创建文件夹/目录?
不可以。C语言和标准库根本没有目录的概念。标准库函数(特别是fopen())消耗文件名,这个概念包含路径(因此也包含目录),但标准规定:
“打开其他(非临时)文件所需的文件名是一个字符串。组成有效文件名的规则由实现定义。”
(C2011 7.21.3/8; 强调添加)
我知道这并没有直接回答问题,但很难证明否定的事情,尤其是简洁地证明。我强调了语言标准甚至不知道目录存在的点,然后向你保证,它没有支持创建目录。
那么我需要使用预处理器来声明要使用哪种方法吗?
这是一种常规的处理方式。你可以有几种方法来实现细节。

-2

mkdir 命令被 许多操作系统 用于创建新目录。因此,我们可以使用它以(大多数情况下)跨平台的方式创建目录。

#include <stdlib.h>
//so we can use system()

稍后,我们可以用这个来创建目录

system("mkdir my_dir");

通常来说,直接执行操作比从程序内部执行命令更好。 - user16217248

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接