CreateDirectory ディレクトリの新規作成

Cの宣言:

BOOL CreateDirectory(LPCTSTR PathName, LPSECURITY_ATTRIBUTES Security);

セキュリティ属性にポインタを指定する場合のVBの宣言:

Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" ( _
    ByVal PathName As String, _
    ByVal Security As Long) As Long

セキュリティ属性に参照を指定する場合のVBの宣言:

Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" ( _
    ByVal PathName As String, _
    ByRef Security As SECURITY_ATTRIBUTES) As Long

説明:

新規ディレクトリを作成する。作成可能なディレクトリは、既に存在するディレクトリ直下のみである。ディレクトリを連鎖的に、一度に作成したい場合は、MakeSureDirectoryPathExistsを用いる。

PathNameに指定可能なディレクトリ名の最大長はMAX_PATHである。UNICODE版では、ディレクトリ名の先頭に“\\?\”を加えることによりMAX_PATHを超えて指定することができる。指定するディレクトリ名がUNCであるならば、"\\?\UNC\マシン名\共有名\ディレクトリ名"となる。しかし、あまりに長いディレクトリ名は、対応するアプリケーションが少ないことが予想されるので、お勧めしない。(NT4.0では、エクスプローラやDOSプロンプトが誤動作を起こした)

引数の意味は、以下の通り。
PathName(IN) 作成するディレクトリの相対ディレクトリ名、または絶対ディレクトリ名。
Serurity(IN) 作成するディレクトリに付与するセキュリティ属性。セキュリティ属性を指定しない場合は、NULLを指定する。

戻り値は、関数の実行に成功したか否かを表す真偽値である。

主なエラーは、以下の通り。
ERROR_PATH_NOT_FOUND 存在しないディレクトリの下にディレクトリを作成しようとした。
ERROR_FILENAME_EXCED_RANGE ディレクトリ名が長すぎる。
ERROR_ALREADY_EXISTS 既にそのディレクトリは存在する。

Cのサンプル:

void DoCreateDir()
{
	CreateDirectory("c:\\test", NULL);
}

VBのサンプル:

'主な宣言
Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" ( _
    ByVal PathName As String, _
    ByVal Security As Long) As Long

Public Const ERROR_ALREADY_EXISTS As Long = 183

' ディレクトリの作成
Private Sub DoCreateDir()
	Dim bResult As Long

	bResult = CreateDirectory("c:\test", 0)

	If bResult = 0 Then
		MsgBox "エラー発生"
		If Err.LastDllError = ERROR_ALREADY_EXISTS Then
			MsgBox "既にディレクトリが存在している"
		End If
	Else
		MsgBox "成功"
	End If
End Sub



(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。