
PowerBuilder (PowerServer) アプリケーションから多階層のフォルダーを一括で作成したい場合、Windows API の SHCreateDirectoryExW 関数を使用するのが便利です。
SHCreateDirectoryExW 関数を使用する最大のメリットは、「指定したパスの途中にある中間フォルダーが存在しない場合でも、再帰的にすべて一括で作成してくれる」点にあります (例 : \\server\share しか存在しない状態で、\\server\share\proj\logs を一度に作成可能)。
本記事では、この Windows API を利用してネットワークフォルダーを作成する手順を解説します。
※ ネットワーク共有のルート (例 : \\server\share) 部分は事前に存在している必要があります。
※ 32-bit / 64-bit アプリケーションどちらでも実行可能です。
はじめに、SHCreateDirectoryExW 関数を、[Local External Functions] または [Global External Functions] に外部関数として定義します。
※ 64-bit 環境でも安全に動作させるため、ハンドル (hwnd) やポインタ (lpSecurityAttributes) の引数には longptr 型を使用します。
※ longptr は PowerBuilder 12.6 以降で利用可能です。旧バージョンの場合は ulong (または long) に置き換えてください。
【Global External Functions】
// ============================================================================== // 外部関数宣言 : SHCreateDirectoryExW Unicode 版 (shell32.dll) // 【概要】Windows 環境で複数階層のフォルダーを一度に作成する // 【引数】 // - hwnd : エラーメッセージなどの UI ダイアログを表示する場合の「親ウィンドウ」を指定 (エラー画面用)。基本 NULL で OK。 // - pszPath : 新しく作りたいフォルダーのフルパスを指定。 // - lpSecurityAttributes : フォルダーに特別なアクセス権限を設定するための構造体へのポインター。基本 NULL で OK。 // 【戻り値】 // - 成功時は 0、失敗時は 0 以外 // ============================================================================== Function long SHCreateDirectoryExW (longptr hwnd, string pszPath, longptr lpSecurityAttributes) Library "shell32.dll"
今回はウィンドウに配置されたボタンを押した際に、ネットワーク上にフォルダーを作成するよう、ボタンの Clicked イベントから SHCreateDirectoryExW 関数を呼び出します。
【ボタンの clicked イベント】
string lsPath long llRC // 作成場所を取得 lsPath = sle_folder.text // セキュリティ属性は null (0) 設定 llRC = SHCreateDirectoryExW(0, lsPath, 0) // 戻り値の扱い CHOOSE CASE llRC CASE 0 // ERROR_SUCCESS 「すべて作成」 MessageBox("OK", "フォルダーを作成しました。") CASE 183 // ERROR_ALREADY_EXISTS // 既に存在 ⇒ 成功扱いでよいケースも多い // (パス上のどこかが存在でも返ることがあります) // 何もしない / 情報表示のみにする CASE ELSE// 代表的なエラー : 5 = アクセス拒否, 53 = ネットワークパスなし MessageBox("エラー", "SHCreateDirectoryExW 失敗。コード=" + String(llRC)) END CHOOSE
アプリケーションを実行後、作成したいフォルダーを指定し、作成ボタンを押します。

今回の例では、ネットワーク上の share フォルダー以下の階層に、自動的に「proj」フォルダーとその直下の「logs」フォルダーが一括で作成されるのが確認できます。


PowerBuilder アプリケーションから Windows API を呼び出す際の概要を理解したい方は、こちらの記事がおすすめです!
Windows API の活用方法はこちら!
Tips情報
プロダクト :PowerBuilder
バージョン :2022R3