Tips

ディレクトリを作成する bookmark

MakeSureDirectoryPathExists bookmark

ディレクトリを作成するには、CreateDirectoryを利用するのが一般的ですが、複数のサブディレクトリを一度に作成することはできません。親のディレクトリを1つずつ作成していく必要があります。

指定されたパスを一度に作成できる便利なAPIがあるのをご存知でしょうか。
そのAPIは、MakeSureDirectoryPathExistsです。ただ、imagehlpに含まれているAPIでWindows 95は標準ではサポートされていません。Windows 95用の再配布モジュールも提供されているので、一緒に配布できれば利用することができます。

簡単なサンプルはこんな感じです。一度に作成できると楽ですね。
ひとつ気をつけないといないのは、引数に渡すパス名です。パス名の最後が\\でなければ、ファイル名とみなされてしまいます。
このサンプルで、最後の\\が無ければ、C:\\hoge\\hoge1までしか作成されません。

このAPIの利用には、imagehlp.hのインクルード、imagehlp.libのリンクが必要です。

SHCreateDirectory bookmark

Windows2000以降であれば、SHCreateDirectoryを利用することもできます。
MakeSureDirectoryPathExistsと違う点もありますので注意が必要です。

  • 作成するパス名はWCHAR文字列で指定
  • パスの最後に\\が無くてもディレクトリと判断する

サンプルのようにあらかじめ決まったパスを作成することは少なく、動的に決定されるケースが多いので、ANSIでコンパイルする場合はCHARからWCHARへの文字列変換が必要です。

このAPIの利用には、shlobj.hのインクルード、shell32.libのリンクが必要です。

その他 bookmark

上記で取り上げた2つのAPI以外にもディレクトリを作成するAPIはあります。
目的に合ったAPIを利用してください。

  • CreateDirectory(セキュリティ識別子の設定が可能)
  • CreateDirectoryEx(セキュリティ識別子の設定が可能)
  • SHCreateDirectory
  • SHCreateDirectoryEx(セキュリティ識別子の設定が可能)
  • MakeSureDirectoryPathExists