FolderクラスのPOSIXシンタックスとファイルシステム

新しくv19で実装されたFolderクラスを使うとPOSIXシンタックスでディレクトリー階層を表記できるというので使ってみた。

これまでは、DOCUMENT LISTというコマンドをよく使ってた。指定したフォルダ内のファイル名が配列で返ってくる。このコマンドにはmacかwinの違いを意識しなければならず、フォルダ名を連結する際に次のようにしていた。

//テンプレートフォルダの場所
$templateFolderPath:=JCL_file_MakeFilePath(Get 4D folder(Database folder); "Resources")
$templateFolderPath:=JCL_file_MakeFilePath($templateFolderPath; "JCL4D_Resources")
$templateFolderPath:=JCL_file_MakeFilePath($templateFolderPath; "method_templates_list")
DOCUMENT LIST($templateFolderPath; $aryFileName; Ignore invisible)  //.DS_Storeを除く

新しくv19で実装されたFolderクラスを使うとどうなるか。

ソースフォルダは次のコードで取得できる。

$folder:=Folder("/SOURCES/Methods/")

今回は、リソースフォルダのファイルリストを取りたいので次のように記述する。

$folder:=Folder("/Resources/JCL4D_Resources/method_templates_list/")

で、これはエラー。ストラクチャファイルからの相対パスかと思って、

$folder:=Folder("../Resources/JCL4D_Resources/method_templates_list/")

とやってもだめ。

正解は、

$folder:=Folder("/RESOURCES/JCL4D_Resources/method_templates_list/")

最初の/(スラッシュ)で始まる大文字のところは「ファイルシステム」と呼ばれていて、リソースフォルダの場合は「fk resources folder」と関連付けられた「/RESOURCES」を与えると、下位のフォルダに簡単にアクセスできるという便利な機能があるようだ。ほかに「SOURCE」とか「DATA」などがある。(POSIXにそんなルールあった?)

https://developer.4d.com/docs/ja/API/FolderClass

結局、従来のやり方よりもスッキリしたコードになった。