Tips

4Dで4Dのデータファイルを作成する

日付2009/11/16
ID09-062
バージョン11
プラットフォームWin, Mac

この記事は、最新ではないバージョンに関連した方法について解説しています。

最新のバージョンでは推奨されていないか、または他の方法で簡単に実現できる可能性があります。

4Dのビルドアプリケーションを起動した時に、アプリケーション利用者にデータファイルを新規に作成させたいという要求は当然のものです。そのような時、データファイルの無いビルドアプリケーションを配布してしまうと、時としてアプリケーション利用者は、アプリケーションフォルダ内にデータファイルを作成してしまうかもしれません。もしアプリケーションフォルダ内にデータファイルを作成してしまうと、アプリケーション自体のアップデートの時に、色々と不都合に見舞われることになりかねません。

こうした事態を防ぐためには、アプリケーションフォルダの外にデータファイルを作成させるようにプログラムする必要があります。データファイルが無いと動作しない4Dに、そのようなプログラムは可能なのでしょうか。

実現方法のヒントは、すでにあります。

上記の情報が言わんとするのは、ビルドアプリケーションではデータファイルを組み込むべきだと言うことです。ビルドアプリケーションにデータファイルが組み込まれていれば、4Dのプログラムは動作を開始できるからです。その上でプログラムから、新しいデータファイルを作成すれば良いのです。具体的には、次のようにな流れになります。

  1. 予め空のデータファイルをビルドアプリケーションに組み込んでおく
  2. ビルドアプリケーションが起動されたら現在使っているデータファイルのパスを取得
  3. データファイルのパスが組み込まれたファイルの時にはデータファイルをユーザに作成させる

作例は、この考え方で作成したのもです。

$path_folder:=Replace string(Get 4D folder(Database Folder);"\\";"\\\\")  `アプリケーションフォルダのパスを取得
If (Match regex($path_folder+".*";Data file))  `データファイルがアプリケーションフォルダの中にあるか?
	$include:=True  `データファイルがアプリケーションフォルダに含まれるとき真
	  `データファイルがアプリケーションフォルダ内にあるとき
	ALERT("データファイルを作成してください")
	$ref:=Create document("";".4dd")  `一度ダミーのファイルを作成
	If (OK=1)  `OKボタンが押されたか?
		CLOSE DOCUMENT($ref)  `ダミーファイルを閉じる
		DELETE DOCUMENT(Document)  `ダミーファイルを削除する
		If (Not(Match regex($path_folder+".*";Document)))  `ダミーファイルがアプリケーションフォルダの外に作られたか?
			If (Document#"@.4dd")  `ダミーファイルの拡張子は4ddか?
				Document:=Document+".4DD"
			End if 
			CREATE DATA FILE(Document)  `データファイルを作成する
			$include:=False
		End if 
	End if 
	If ($include)
		ALERT("データファイルが作成されませんでした";"ありゃまあ!")
	End if 
End if