コンピューターで使用する全てのドキュメントとアプリケーションは、自身のマシンに実装または接続されているハードディスクやフロッピーディスク、その他の類似する恒久的なストレージ装置内にファイルとして格納されています。4Dでは、これらのドキュメントやアプリケーションに言及する際、ファイルまたはドキュメントという表現を使用します。しかし、このテーマのほとんどのコマンドにおいては、"ドキュメント" という表現が使用されています。それは、多くの時間、ユーザはこれらのコマンドを使用して、(アプリケーションやシステムファイルよりも) ディスク内のドキュメントにアクセスするからです。
ハードディスクは、1つまたは複数のパーティションとしてフォーマットされます。それぞれのパーティションはボリュームと呼ばれ、2つのボリュームが、物理的に同じハードディスク内に存在しても問題はありません。4Dのレベルでは、通常、これらのボリュームを個別で等しい実体として扱います。
ボリュームはマシンに物理的に接続されているハードディスク、あるいはTCP/IPやAFP、SMBなどのようなファイル共有プロトコルを通してマウントされたハードディスクに置かれています。いかなる場合でも、4Dレベルでシステムドキュメントコマンドを使用する際、これら全てのボリュームを同じ方法で扱います(ただし、特殊な場合、例えばプラグインを使用してアプリケーションの能力を拡大する場合はなどは例外です) 。
それぞれのボリュームには、ボリューム名が付けられています。Windowsではボリューム名の後にコロンを続けてボリュームを指定します。通常CやDはシステムを起動するボリュームを指定するために使用されます (特にPCで設定変更しない場合) 。EからZの文字は、PCに接続、または実装されている付加ボリューム用(USBドライブ、追加ドライブ、ネットワークドライブ等)に使用されます。Macintoshでは、ボリューム名はそのままです。これらは、デスクトップ上のFinderレベルで見ることができます。
通常、ドキュメントをフォルダーへ分類します。そして、そのフォルダー自体、他のフォルダーを格納しています。同じボリュームのレベルで何千というファイルを蓄積するのは良い方法ではありません。乱雑ですし、システムの速度を低下させます。Windowsでは、フォルダーをディレクトリとも呼び、Macintoshでは、そのままフォルダーと呼びます。
ドキュメントを区別するには、そのドキュメントが保存されているフォルダの名前とボリュームの名前、そして、そのドキュメント自体の名前を知る必要があります。これらすべての名前を連結し、そのドキュメントへのパス名 を取得します。このパス名においてフォルダ名は、フォルダーセパレーター記号と呼ばれる特殊文字で区切られます。Windowsではその文字はバックスラッシュ(\: 日本語フォント環境では円マーク)です。Macintoshでは、コロン(:)になります。 POSIX シンタックスでは、スラッシュ(/)になります。
では例を見てみましょう。Current Workフォルダー内にあるDocumentsフォルダーのMemosフォルダーに保存されているドキュメントImportant Memo.txtがある場合を考えます。
Windowsでは、これらのすべてがCドライブ(ボリューム) に保存されていれば、そのドキュメントのパス名は次のようになります。
C:\Current Work\Documents\Memos\Important Memo.txt
注: バックスラッシュ(\) は、4Dのメソッドエディタでエスケープシーケンスを表すために使用されます。解釈上の問題を回避するために、エディタは自動的にパス名を変更します。例えば、C:\DiskからC:\\Diskへと変換します。詳細については後述のWindowsのパス名の入力とエスケープシーケンスの項目を参照してください。.
Macintoshではこれらの全てが、 Internal Driveディスク(ボリューム) に保存されていれば、そのドキュメントのパス名は次のようになります。
Internal Drive:Current Work:Documents:Memos:Important Memo.txt
いかなるプラットフォームでも、ドキュメントの完全なパス名は次のように表示されます。
VolName DirSep { DirName DirSep { DirName DirSep { ... } } } DocName
ボリュームにあるすべてのドキュメント (ファイル) には、幾つかの特性があります。通常、属性またはプロパティと呼ばれるものと、ドキュメントの名前やタイプ、クリエータなどがあります。
ドキュメントは、読み/書きモードで開く、読み込み専用モードで開く、または閉じます。ビルトインの 4Dコマンドを使用して、一度のプロセスでドキュメントを読み/書きモードで、素早く開くことができます。1つのプロセスで複数のドキュメントを開くこと が可能です。複数のプロセスでは、ドキュメントを多重に開くことができます。読み込み専用モードで同じドキュメントを必要な回数だけ開くことができます。 しかし、読み/書きモードでは、一度に同じドキュメントを2つ開くことはできません。
Open document、Create document そして Append document コマンドを使用してドキュメントを開きます。Create document と Append document コマンドは、自動的にドキュメントを読み/書きモードで開きます。Open document コマンドを使用する場合のみ、開くモードを選択できます。ドキュメントが開くと、ドキュメントから読み込みをしたり、ドキュメントへ書き出しをしたりできます (RECEIVE PACKET と SEND PACKET コマンドを参照) 。ドキュメントでの作業が終了したら CLOSE DOCUMENT コマンドを使用してドキュメントを閉じます。
全ての開かれたドキュメントは、Open document、Create document そして Append document コマンドから返されたDocRef式 を使用して参照されます。DocRefは開かれたドキュメントを識別するために使用します。DocRefは時間タイプの式です。開かれたドキュメントを操 作する全てのコマンドは、引数としてDocRefを受け取ります。誤ったDocRefをこれらのコマンドの1つに渡すと、ファイルマネージャエラーが発生 します。
注: プリエンプティブ・プロセスからコールされた場合に生成される DocRef 参照は同プリエンプティブ・プロセスでのみ使用可能です。コオペラティブ・プロセスからコールされた場合に生成される DocRef 参照は別のコオペラティブ・プロセスでも使用可能です。
ドキュメントにアクセス (開く、閉じる、削除する、名前を変更する、コピーする) したり、ドキュメントのプロパティを変更したり、ドキュメントで文字を読んだり書いたりすると、I/Oエラーが発生することがあります。ドキュメントが見つからないこともありますし、ロックされていることもあります。また、書き込みモードで既に開いていることもあります。ON ERR CALLを用いてインストールされたエラー処理メソッドで、これらのエラーを検知することができます。システムドキュメントを使用している間に発生するほとんどのエラーに関しては、で説明しています。
コマンドOpen document、Create document、Append documentそしてSelect documentを使用して、標準的なファイルを開くまたは保存するダイアログボックス経由でドキュメントへアクセスできます。 標準ダイアログを通してドキュメントにアクセスすると、Documentシステム変数にドキュメントの完全なパス名が返されます。このシステム変数は、コマンドの引数リストに表示される引数documentと区別されなければなりません。
Document システム変数についてのより詳細な情報については、システム変数 の章に説明があります。
4Dのメソッドエディタではエスケープシーケンスの使用が可能です。エスケープシーケンスとは、文字 列のセットで、"特殊" 文字を置き換えるために使用します。シーケンスはバックスラッシュ(\: 日本語フォント環境では円マーク) で始まり、その後に文字が続きます。例えば、\t は、Tab 文字のエスケープシーケンスになります。
Windowsでは、\文字を使用して、パス名を区切ります。4Dでは、ほとんどの場合、シングルバックスラッシュをダブルバックスラッシュに置き換えることによって、Windowsのメソッドエディタに入力されているパス名を、正確に判断します。例を挙げると、C:\Folder はC:\\Folderとなります。
しかし、C:\MyDocuments\Newと書くと、4DはC:\\MyDocuments\Newと表示します。この場合、2番目の \ は、\N (存在しているエスケープシーケンス) として正確に判断されません。従って、4Dで識別されているエスケープシーケンスの1つで使用される文字の前にバックスラッシュを挿入したいときは、手入力で\\を入力しなければなりません。
4Dは次のエスケープシーケンスを識別します。
エスケープシーケンス | 置き換え文字 |
\n | LF (New line) |
\t | HT (Horizontal tab) |
\r | CR (Carriage return) |
\\ | \ (Backslash) |
\" | " (Quotes) |
この章のルーチンのほとんどは、ドキュメント名、相対パス名、あるいは絶対パス名を受け付けます:
- 相対パス名 はディスク上の任意のディレクトリを起点とし、そこから目的のファイルやフォルダーまでの位置関係を記述するものです。ドキュメント名のみを渡した場合、それは相対パス名を使用しているとみなされます。4Dの場合、通常相対パスの起点はデータベースフォルダー、つまりストラクチャーファイルが格納されているフォルダーとなります。相対パス名は異なる環境に対してアプリケーションを配布する場合に特に有用です。
- 絶対パス名 はボリュームのルートを起点として場所を記述します。データベースフォルダーの所在場所は関連しません。
コマンドに渡されるパス名が相対・絶対どちらで解釈されるべきかを決定するため、4Dは各プラットフォームごとに特定のアルゴリズムを適用します。
絶対パスと解釈されるケース
- パス名が二文字だけで構成され、二文字目がコロンの場合 ':'
- パス名の二文字目と三文字目がそれぞれコロンとバックスラッシュ (円マーク) の場合
- パス名が "\\" で始まる場合
その他のケースはすべて相対パスと解釈されます。
CREATE FOLDERコマンドの例題:
CREATE FOLDER("Monday")
CREATE FOLDER("\Monday")
CREATE FOLDER("\Monday\Tuesday")
CREATE FOLDER("c:")
CREATE FOLDER("d:\Monday")
CREATE FOLDER("\\srv-Internal\temp")
相対パスと解釈されるケース
- パス名がディレクトリ区切り文字 ':' で始まる場合
- パス名がディレクトリ区切り文字を含まない場合
それ以外のケースはすべて絶対パスです。
CREATE FOLDERコマンドの例題:
CREATE FOLDER("Monday")
CREATE FOLDER("macintosh hd:")
CREATE FOLDER("Monday:Tuesday")
CREATE FOLDER(":Monday:Tuesday")
Path to object および Object to path コマンドを使用することでパス名の中身を管理することができます。具体的には、パス名からは以下のものを取得することができます:
- ファイル名
- 親フォルダパス
- ファイルあるいはフォルダの拡張子