CreateDirectoryExA 関数 (winbase.h)

指定したテンプレート ディレクトリの属性を使用して新しいディレクトリを作成します。 基になるファイル システムでファイルとディレクトリのセキュリティがサポートされている場合、関数は指定されたセキュリティ記述子を新しいディレクトリに適用します。 新しいディレクトリには、指定したテンプレート ディレクトリの他の属性が保持されます。

この操作をトランザクション操作として実行するには、 CreateDirectoryTransacted 関数を使用します。

構文

BOOL CreateDirectoryExA(
  [in]           LPCSTR                lpTemplateDirectory,
  [in]           LPCSTR                lpNewDirectory,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

パラメーター

[in] lpTemplateDirectory

新しいディレクトリの作成時にテンプレートとして使用するディレクトリのパス。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前もって指定しなくても、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 名前付けファイル、パス、および名前空間 」の「パスの最大長制限」セクションを参照してください。

[in] lpNewDirectory

作成するディレクトリのパス。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前もって指定しなくても、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 名前付けファイル、パス、および名前空間 」の「パスの最大長制限」セクションを参照してください。

[in, optional] lpSecurityAttributes

SECURITY_ATTRIBUTES構造体へのポインター。 構造体の lpSecurityDescriptor メンバーは、新しいディレクトリのセキュリティ記述子を指定します。

lpSecurityAttributesNULL の場合、ディレクトリは既定のセキュリティ記述子を取得します。 ディレクトリの既定のセキュリティ記述子のアクセス制御リスト (ACL) は、親ディレクトリから継承されます。

このパラメーターを有効にするには、ターゲット・ファイル・システムがファイルとディレクトリーのセキュリティーをサポートしている必要があります。 これは、 GetVolumeInformationFS_PERSISTENT_ACLSを返したときに示されます。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合、戻り値はゼロ (0) になります。 詳細なエラー情報を得るには、GetLastError を呼び出します。 考えられるエラーは次のとおりです。

リターン コード 説明
ERROR_ALREADY_EXISTS
指定されたディレクトリは既に存在します。
ERROR_PATH_NOT_FOUND
1 つ以上の中間ディレクトリが存在しません。 この関数は、パスに最終的なディレクトリのみを作成します。 パス上のすべての中間ディレクトリを作成するには、 SHCreateDirectoryEx 関数を使用します。

Remarks

CreateDirectoryEx 関数を使用すると、他のディレクトリからストリーム情報を継承するディレクトリを作成できます。 この関数は、たとえば、ディレクトリの内容を属性として適切に識別するために必要なリソース ストリームがある Macintosh ディレクトリを使用している場合に便利です。

NTFS ファイル システムなどの一部のファイル システムでは、個々のファイルとディレクトリの圧縮または暗号化がサポートされています。 このようなファイル システム用にフォーマットされたボリュームでは、新しいディレクトリは親ディレクトリの圧縮属性と暗号化属性を継承します。

ディレクトリへのハンドルを取得するには、FILE_FLAG_BACKUP_SEMANTICS フラグを設定して CreateFile 関数を呼び出します。 コード例については、「 CreateFile」を参照してください。

このオブジェクトのセキュリティ記述子に対してクエリを実行する継承関数をサポートするには、継承が有効であることをヒューリスティックに判断して報告できます。 詳細については、「 継承可能 ACE の自動伝達」を参照してください。

Windows 8とWindows Server 2012では、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル はい
SMB 3.0 Transparent Failover (TFO) はい
スケールアウト ファイル共有を含む SMB 3.0 (SO) はい
クラスター共有ボリューム ファイル システム (CsvFS) はい
Resilient File System (ReFS) はい
 

注意

winbase.h ヘッダーは、CreateDirectoryEx をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CreateDirectory

CreateDirectoryTransacted

CreateFile

ディレクトリの作成と削除

ディレクトリ管理機能

RemoveDirectory

SECURITY_ATTRIBUTES