5

我在 VC2013 中为 windows使用 dirent.h 1.20 ( source )。

我在里面找不到mkdir()

我应该如何使用它?或者我可以仅使用dirent.h 以某种方式创建目录吗?

4

5 回答 5

13

在不使用任何其他库的情况下提供帮助的最简单方法是。

#if defined _MSC_VER
#include <direct.h>
#elif defined __GNUC__
#include <sys/types.h>
#include <sys/stat.h>
#endif

void createDir(string dir) {
#if defined _MSC_VER
    _mkdir(dir.data());
#elif defined __GNUC__
    mkdir(dir.data(), 0777);
#endif
}
于 2014-05-03T08:23:51.740 回答
4

更新:由于 C++17,<filesystem>是可移植的方式。对于早期的编译器,请查看Boost.Filesystem


您链接到的标头有效地将您的(POSIX)dirent.h调用转换为(本机)Windows 调用。但是dirent.h是关于目录条目,即读取目录,而不是创建目录

如果要创建目录 ( mkdir()),则需要:

  • 一个类似的包装标头将您的(POSIX)mkdir()调用转换为相应的(本机)Windows 函数调用(我无法为您指出这样的标头),或者
  • 直接使用Windows API,这可能是实用的,但会导致 POSIX 和 Windows 函数的混合非常丑陋......

// UGLY - these two don't belong in the same source...
#include <dirent.h>
#include <windows.h>

// ...
CreateDirectory( "D:\\TestDir", NULL );
// ...

另一种解决方案是看一下Cygwin,它提供了在 Windows 上运行的 POSIX 环境,包括 Bash shell、GCC 编译器工具链,以及完整的 POSIX 头文件集合,如dirent.hsys/stat.hsys/types.h,让您可以始终如一地使用 POSIX API你的编程。

于 2014-05-02T12:13:58.523 回答
2

Visual Studio 包含<direct.h>标题。此标头声明_mkdir 和 _wmkdir,可用于创建目录,并且是 Visual Studio 随附的 C 库的一部分。

另一个“简单”选项是使用DevSolar指示的 Windows API 调用。

于 2014-05-02T12:38:30.373 回答
0

您可以使用 sys/types.h 头文件并使用
mkdir(const char*)方法创建目录
以下是示例代码

#include<stdio.h>
#include<string.h>
#include <unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
int main()
{
    if(!mkdir("C:mydir"))
    {
        printf("File created\n");
    }
    else
        printf("Error\n");
}
于 2016-06-24T05:23:44.823 回答
0

mkdir 已弃用。给#include <direct.h>作为头文件。然后写

_mkdir("C:/folder")
于 2019-02-03T14:13:29.390 回答