存在しないパスのフォルダを一発で作成する


フォルダを作成する方法はたくさんありますが、深い階層のフォルダを作成するとき、パスの中に存在しないフォルダがある場合は、そこから作成しなければなりません。たとえば「C:\Work\Sample\Test」というフォルダを作りたいとき、もし「C:\Work\Sample」フォルダが存在しない場合は、まず「C:\Work\Sample」フォルダを作り、次に「C:\Work\Sample\Test」フォルダを作らなければなりません。FileSystemObjectでこれをやるには、どこから存在するかを再帰的にチェックするなどの方法があります。その方法は「保存先のフォルダがなかったら作る」をご覧ください。

まぁ、これはこれで技術としてはおもしろいので何かに役立つでしょうけど、実はSHCreateDirectoryExというAPIを使うと、こうした存在しないパスのフォルダを一発で作成することができます。次のコードは、InputBoxで入力されたフォルダを作成します。

Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" ( _
                                                                  ByVal hwnd As Long, _
                                                                  ByVal pszPath As String, _
                                                                  ByVal psa As Long) As Long
Sub Sample()
    Dim rc As Long, Target As String
    Target = InputBox("作成するフォルダのフルパスを入力してください")
    If Target = "" Then Exit Sub
    rc = SHCreateDirectoryEx(0&, Target, 0&)
    If rc = 0 Then
        MsgBox Target & "を作成しました"
    ElseIf rc = 183 Then
        MsgBox Target & "は存在しています"
    Else
        MsgBox Target & "を作成できませんでした"
    End If
End Sub

指定したフォルダの作成に成功すると 0 が返ります。作成しようとしたフォルダがすでに存在すると 183 が返るらしいです。すいません、このへんはよくわかりません。80 が返ると書かれたページもありました。正確なところはMicrosoftの技術情報などをご確認ください。