在c ++中使用CreateDirectory windows API

use*_*336 9 c++ windows api mkdir subdirectory

我刚刚发现了一小段代码,让我在不使用system()的情况下使用windows API创建目录.唯一的问题是我无法在子目录中创建目录.例如

#include<windows.h>

int main(){
   CreateDirectory ("C:\\random", NULL);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在C中创建名为random的文件夹.

但如果我这样做

    #include<windows.h>

int main(){
   CreateDirectory ("C:\\Users\morons", NULL);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在名为Usersmorons的C che文件夹中创建,而不是在Users下创建文件夹morons.有什么建议?

jos*_*mas 38

您需要管理员权限才能在C:\ Users中创建或删除文件夹.确保您以管理员身份运行.exe,以确保您拥有这些权限.如果不这样做,那么CreateDirectory将失败.

要获取返回的错误,请使用GetLastError.有关可能返回的错误的参考,请参阅下面的"返回值"部分

http://msdn.microsoft.com/en-us/library/windows/desktop/aa363855%28v=vs.85%29.aspx

此外,您正在寻找的代码是

CreateDirectory ("C:\\Users\\morons", NULL);
Run Code Online (Sandbox Code Playgroud)

因为在"蠢货"之前需要有一个"\\"

  • 当我得到所有的赞成票时,这是一个非常不公平的答案.有一个upvote :-) (7认同)

Ano*_*yne 21

你需要另一个反斜杠:

CreateDirectory ("C:\\Users\\morons", NULL);
Run Code Online (Sandbox Code Playgroud)

  • ...或者你可以使用正斜杠:`CreateDirectory("c:/ user/morons")`.Windows需要在命令行上使用反斜杠,但API接受反斜杠或普通斜杠. (11认同)

Ton*_*ous 5

使 Windows 应用程序跨平台,使用CreateDirectory()c++17 标准现在有std::filesystem::create_directories

#include<iostream>
#include <filesystem>

int main()
{
    std::filesystem::create_directories("C:\\newfolder\\morons");
}
Run Code Online (Sandbox Code Playgroud)

需要更改 makefile-std=c++17并更新到支持 c++17 的 GCC 编译器。

在 Visual Studio 中按照此处的步骤启用 c++17