web-dev-qa-db-ja.com

C ++でのCreateDirectoryWindowsAPIの使用法

system()を使用せずにWindowsAPIでディレクトリを作成できる小さなコードを見つけました。唯一の問題は、サブディレクトリにディレクトリを作成できないことです。例えば

#include<windows.h>

int main(){
   CreateDirectory ("C:\\random", NULL);
   return 0;
}

Cでrandomという名前のフォルダーを作成します。

しかし、私がそうするなら

    #include<windows.h>

int main(){
   CreateDirectory ("C:\\Users\morons", NULL);
   return 0;
}

これは、Usersの下のフォルダーmoronsではなく、Usersmoronsという名前のCcheフォルダーに作成されます。何か提案はありますか?

9
user1143336

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);

「morons」の前に「\\」が必要なので

38
josephthomas

そこに別のバックスラッシュが必要です:

CreateDirectory ("C:\\Users\\morons", NULL);
21
Anodyne

Windowsアプリケーションをクロスプラットフォームにして、CreateDirectory() c ++ 17標準を使用していましたが、現在は std :: filesystem :: create_directories

#include<iostream>
#include <filesystem>

int main()
{
    std::filesystem::create_directories("C:\\newfolder\\morons");
}

Makefileを-std=c++17に変更し、c ++ 17をサポートするGCCコンパイラに更新する必要があります。

Visual Studioで、次の手順に従います ここ c ++ 17を有効にします

0
Tony Tannous