多階層のディレクトリを作成するには親ディレクトリから1つずつ作成していきます。
しかしこれでは面倒なので、ForceDirectories 関数を使って一発で作成することができます。
また、APIを使っても一発で作成することができます。
ForceDirectories は Delphi のヘルプに解説があるので、以下では API を使用する方法を解説します。
使用するAPIは、「MakeSureDirectoryPathExists」です。
この API と ForceDirectories との違いとしては、ForceDirectories は作成したいディレクトリを引数に指定するのに対し、 MakeSureDirectoryPathExists はファイル名を指定します。ディレクトリ名を指定したい場合は末尾に「\」を付けて渡す必要があります。
このAPIを使用するには以下の定義が必要です。
interface function MakeSureDirectoryPathExists(DirPath: LPCSTR): Bool; stdcall; implementation function MakeSureDirectoryPathExists; external 'IMAGEHLP.DLL' name 'MakeSureDirectoryPathExists';
DirPath にはファイル名を指定します。 パスの最後のコンポーネントがファイル名ではなくディレクトリである場合、文字列の最後に円記号(\)を記述しなければなりません。 このAPIは失敗すると False を返します。 こんな感じになります
procedure TForm1.Button1Click(Sender: TObject); begin if not MakeSureDirectoryPathExists(PChar('c:temp')) then raise Exception.Create('Cannot create c:temp'); end;
補足
- 設定可能なファイル名の長さは200-260文字程度みたいです。
- APIなので String を PWideChar または PChar で型キャストする必要があります。
参照
2015.11.20 MSDNのリンク先が変更になっていたので修正
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。