● 子階層を含むすべてのディレクトリを作成する ●

mkdir や CreateDirectory API 関数は親ディレクトリ直下のディレクトリを1つしか作成しない。例えば "C:\xxx\yyy\zzz" のディレクトリを作成する場合は、

    Call mkdir("C:\xxx")
    Call mkdir("C:\xxx\yyy")
    Call mkdir("C:\xxx\yyy\zzz")

と、しなければならない。ぶっちゃけ面倒なので、一気にディレクトリを作成したいものである。ということで以下のAPI関数がある。この関数はVB4.0時代からあったと記憶しているが、参照するDLLファイルが imagehlp.dll なので使用して良いのか微妙であった。imagehlp.dll って特定バージョンのインターネット・エクスプローラをインストールしなければならないという制約があったような気がするし、また少なくとも Windows 95 には無かったような気がする。最近の OS ではあって当たり前という解釈でよいのかな?

以下URLで、堂々と書いてあるし。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_MakeSureDirectoryPathExists.htm(古すぎ)
http://msdn.microsoft.com/ja-jp/library/cc428915.aspx

んじゃ、コーディング開始!!

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal DirHelp As String) As Long

MakeSureDirectoryPathExists API関数で注意しなければならないことは、引数 DirHelp の最後尾の文字は \ で終わらなければならないことである。最後尾に "\" を付け忘れると正常終了値(=1)を返すがディレクトリは作成されないという意味不明な状態に陥る。

'-----------------------------------------------------------------------
' 関数名 : CreateDir
' 機能   : ディレクトリを作成する
' 引数   : (in) DirName … ディレクトリ名
' 戻り値 : 正常終了:1  異常終了:0
'-----------------------------------------------------------------------
Private Function CreateDir(ByVal DirName As String) As Long

    '最後尾が \ でない場合は付けてあげる
    If Right$(DirName, 1) <> "\" Then DirName = DirName & "\"

    CreateDir = MakeSureDirectoryPathExists(DirName)

End Function

戻る