Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 创建文件夹/目录的跨平台方法?_C_Linux_Windows_Macos_Cross Platform - Fatal编程技术网

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

C 创建文件夹/目录的跨平台方法?,c,linux,windows,macos,cross-platform,C,Linux,Windows,Macos,Cross Platform,有没有一种方法可以使用C“在代码中”创建一个跨平台的文件夹/目录?或者我必须使用预处理器来说明使用哪种方法?您需要一个#define来执行此操作 为了保持代码的整洁,您需要使用一个定义Linux函数的函数,以便在编译Windows时将其转换为等效的Windows函数 在源文件的顶部,您将在特定于Windows的部分中看到: #include <windows.h> #define mkdir(dir, mode) _mkdir(dir) 以下是一些可能有用的其他方法: #defi

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

您需要一个
#define
来执行此操作

为了保持代码的整洁,您需要使用一个定义Linux函数的函数,以便在编译Windows时将其转换为等效的Windows函数

在源文件的顶部,您将在特定于Windows的部分中看到:

#include <windows.h>

#define mkdir(dir, mode) _mkdir(dir)
以下是一些可能有用的其他方法:

#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)
有没有一种方法可以使用C“在代码中”创建一个跨平台的文件夹/目录

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

打开其他(非临时)文件的函数需要一个文件 名称,它是一个字符串。组成有效文件名的规则如下 实现定义

(C2011 7.21.3/8;增加强调)

我知道这并不能直接说明问题,但很难证明是否定的,尤其是要简明扼要地证明。我要强调的是,语言标准甚至不知道目录的存在,在向您保证它不支持创建目录之前

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


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

使用命令
mkdir
创建新目录。因此,我们可以使用它以(大部分)跨平台的方式创建目录

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

\u mkdir(“./newfolder”)
可能在windows上工作,但在windows上不工作linux@Stan可以我知道linux有
mkdir(“./directory”,0700)
。我需要什么标题才能使用windows等效文件?请看@dbush-answer。我说的是
\u mkdir
,不是
mkdir
。有一点不同:)@Stan我知道,我只是说知道它的存在:)
#include <stdlib.h>
//so we can use system()
system("mkdir my_dir");