記事カテゴリ

ユーザー機能

カウンター


 2021年9月25日(土) 22:14 JST

[Delphi] 一回で深い階層のディレクトリを作成する

  • 投稿者:
  • 表示回数
    6,334

多階層のディレクトリを作成するには親ディレクトリから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;

補足

  1. 設定可能なファイル名の長さは200-260文字程度みたいです。
  2. APIなので String を PWideChar または PChar で型キャストする必要があります。

参照

  1. Microsoft Developer Network Library

2015.11.20 MSDNのリンク先が変更になっていたので修正

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgramingFAQ_del0048

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。