<p>多階層のディレクトリを作成するには親ディレクトリから１つずつ作成していきます。<br /> しかしこれでは面倒なので、ForceDirectories 関数を使って一発で作成することができます。<br /> また、APIを使っても一発で作成することができます。<br /> ForceDirectories は Delphi のヘルプに解説があるので、以下では API を使用する方法を解説します。<br /> <br /> 使用するAPIは、「MakeSureDirectoryPathExists」です。<br /> この API と ForceDirectories との違いとしては、ForceDirectories は作成したいディレクトリを引数に指定するのに対し、 MakeSureDirectoryPathExists はファイル名を指定します。ディレクトリ名を指定したい場合は末尾に「\」を付けて渡す必要があります。<br /> <br />このAPIを使用するには以下の定義が必要です。</p>
<pre class="brush: delphi;" title="MakeSureDirectoryPathExists">interface
  function MakeSureDirectoryPathExists(DirPath: LPCSTR): Bool; stdcall;
implementation
  function MakeSureDirectoryPathExists; external 'IMAGEHLP.DLL' name 'MakeSureDirectoryPathExists';
</pre>
<p>DirPath にはファイル名を指定します。 パスの最後のコンポーネントがファイル名ではなくディレクトリである場合、文字列の最後に円記号（\）を記述しなければなりません。 このAPIは失敗すると False を返します。 こんな感じになります</p>
<pre class="brush: delphi;" title="MakeSureDirectoryPathExists">procedure TForm1.Button1Click(Sender: TObject);
begin
  if not MakeSureDirectoryPathExists(PChar('c:temp')) then
    raise Exception.Create('Cannot create c:temp');
end;
</pre>
<p><em>補足</em></p>
<ol>
<li>設定可能なファイル名の長さは200-260文字程度みたいです。</li>
<li>APIなので String を PWideChar または PChar で型キャストする必要があります。</li>
</ol>
<p><em>参照</em></p>
<ol>
<li><a href="https://msdn.microsoft.com/ja-jp/library/cc428990.aspx">Microsoft Developer Network Library</a></li>
</ol>
<p>2015.11.20 MSDNのリンク先が変更になっていたので修正</p>