Tips

クロスプラットフォームアプリケーションでパス名を記述する

日付2010/10/27
ID76181 (英語原文参照)
バージョンv12
プラットフォームMac/Win

4D v12では, プラットフォームの違いを考慮したプログラムがずっと書きやすくなりました。

たとえば, プラットフォームに関係なく, 特定の場所にエクスターナルデータベースを作成したい場合, 次のようにしてパス名を作成することができます。

はじめに, プラットフォームに関係なく, POSIX形式で目的のパス名を定義します。続いてプラットフォームを特定します。Convert path POSIX to systemコマンドは, POSIXパスをシステム固有のパスに変換するコマンドですが, このときWindowsではルートドライブ名が返されないので, System folderで取得したそれを追加します。

$Path_T:="/myDirectory/"
PLATFORM PROPERTIES($Platform_L)
If ($Platform_L=Mac OS)
   $Path_T:=Convert path POSIX to system($Path_T)
Else 
    // Root may not be the "c" drive
    //
   $Root_T:=System folder
   $Ndx:=Position(":";$Root_T)
   $Root_T:=Substring($Root_T;1;$Ndx)
   $Path_T:=$Root_T+Convert path POSIX to system($Path_T)
End if

次にパス名の存否を確認し, 存在しなければ新しいフォルダを作成します。4D v12では, ダイナミック定数Folder separatorをパス名の構築に活用することができます。

If (Test path name($Path_T)#Is a directory)
    CREATE FOLDER($Path_T)
End if 

$Path_T:=$Path_T+Folder separator+"Externals"+Folder separator
If (Test path name($Path_T)#Is a directory)
    CREATE FOLDER($Path_T)
End if 

$Path_T:=$Path_T+"myExtDB"

最後に, このパス名でSQLを実行することができます。

Begin SQL
    CREATE DATABASE IF NOT EXISTS DATAFILE :$Path_T;
End SQL