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

时间:2017-03-20 14:15:26

标签: c linux windows macos cross-platform

有没有办法使用C创建一个“代码”中的文件夹/目录,这是跨平台的?或者我是否必须使用预处理器来说明要使用哪种方法?

3 个答案:

答案 0 :(得分:3)

您需要#define才能执行此操作。

为了让您的代码看起来整洁,您需要使用一个定义Linux功能的代码,以便在编译Windows时转换为等效的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)

答案 1 :(得分:0)

  

有没有办法使用C创建一个“代码中”的文件夹/目录,这是跨平台的?

没有。 C语言和标准库根本没有目录的概念。有标准的库函数,特别是fopen(),它们使用文件名,这个概念包含路径(因此也包含目录),但是the standard specifies

  

打开其他(非临时)文件的功能需要一个文件   name,这是一个字符串。 组成有效文件名的规则是   实现定义

(C2011 7.21.3 / 8;强调增加)

我知道这并不能直接解决这个问题,但很难证明是消极的,特别是要简明扼要。我强调指出语言标准甚至不知道目录存在,然后向你保证,特别是它不支持创建目录。

  

或者我是否必须使用预处理器来说明要使用哪种方法?

这将是一种传统的方式。有几种方法可以实现细节。

答案 2 :(得分:-1)

a lot of operating systems 使用命令 mkdir 创建新目录。因此,我们可以使用它以(主要是)跨平台的方式创建目录。

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

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

system("mkdir my_dir");