4D v16.3

システムドキュメント

ホーム

 
4D v16.3
システムドキュメント

システムドキュメント  


 

概要  

コンピューターで使用する全てのドキュメントとアプリケーションは、自身のマシンに実装または接続されているハードディスクやフロッピーディスク、その他の類似する恒久的なストレージ装置内にファイルとして格納されています。4Dでは、これらのドキュメントやアプリケーションに言及する際、ファイルまたはドキュメントという表現を使用します。しかし、このテーマのほとんどのコマンドにおいては、"ドキュメント" という表現が使用されています。それは、多くの時間、ユーザはこれらのコマンドを使用して、(アプリケーションやシステムファイルよりも) ディスク内のドキュメントにアクセスするからです。

ハードディスクは、1つまたは複数のパーティションとしてフォーマットされます。それぞれのパーティションはボリュームと呼ばれ、2つのボリュームが、物理的に同じハードディスク内に存在しても問題はありません。4Dの最初のレベルでは、通常、これらのボリュームを個別で等しい実体として扱います。

ボリュームはマシンに物理的に接続されているハードディスク、あるいはTCP/IPやAFP、SMBなどのようなファイル共有プロトコルを通してマウントされたハードディスクに置かれています。いかなる場合でも、4Dレベルでシステムドキュメントコマンドを使用する際、これら全てのボリュームを同じ方法で扱います (方法について熟知していて、プラグインを使用してアプリケーションの能力を拡大する場合は例外です) 。

それぞれのボリュームには、ボリューム名が付けられています。Windowsではボリューム名の後にコロンを続けてボリュームを指定します。通常CやDはシステムを起動するボリュームを指定するために使用されます (特にPCで設定変更しない場合) 。EからZの文字は、PC(DVDドライブ、追加ドライブ、ネットワークドライブ等) に接続、または実装されている付加ボリューム用に使用されます。Macintoshでは、ボリューム名はそのままです。これらは、デスクトップ上のFinderレベルで見ることができます。

通常、ドキュメントをフォルダーへ分類します。そして、そのフォルダー自体、他のフォルダーを格納しています。同じボリュームのレベルで何千というファイルを蓄積するのは良い方法ではありません。乱雑ですし、システムの速度を低下させます。Windowsでは、フォルダーをディレクトリと呼び、Macintoshでは、そのままフォルダーと呼びます。

ドキュメントを区別するには、そのドキュメントが保存されているフォルダの名前とボリュームの名前、そして、そのドキュメント自体の名前を知る必要があります。これらすべての名前を連結し、そのドキュメントへのパス名 を取得します。このパス名においてフォルダ名は、フォルダーセパレーター記号と呼ばれる特殊文字で区切られます。Windowsではその文字はバックスラッシュ(\: 日本語フォント環境では円マーク)です。Macintoshでは、コロン(:)になります。

では例を見てみましょう。Current Workフォルダー内にあるDocumentsフォルダーのMemosフォルダーに保存されているドキュメントImportant Memoがあります。

Windowsでは、これらのすべてがCドライブ(ボリューム) に保存されていれば、そのドキュメントのパス名は次のようになります。

C:\Current Work\Documents\Memos\Important Memo.TXT

注: バックスラッシュ(\) は、4Dのメソッドエディタでエスケープシーケンスを表すために使用されます。解釈上の問題を回避するために、エディタは自動的にパス名を変更します。例えば、C:\DiskからC:\\Diskへと変換します。詳細については後述の"ドキュメント名、またはドキュメントのパス名を指定する" 項目を参照してください。.

Macintoshではこれらの全てが、 Internal Driveディスク(ボリューム) に保存されていれば、そのドキュメントのパス名は次のようになります。

Internal Drive:Current Work:Documents:Memos:Important Memo

Windowsの例ではドキュメントの名前に接尾辞.TXTが付いています。その理由は、次のセクションで説明します。

いかなるプラットフォームでも、ドキュメントの完全なパス名は次のように表示されます。

VolName DirSep { DirName DirSep { DirName DirSep { ... } } } DocName

ボリュームにあるすべてのドキュメント (ファイル) には、幾つかの特性があります。通常、属性またはプロパティと呼ばれるものと、ドキュメントの名前タイプ、クリエータなどがあります。

ドキュメントは、読み/書きモードで開く読み込み専用モードで開く、または閉じます。ビルトインの 4Dコマンドを使用して、一度のプロセスでドキュメントを読み/書きモードで、素早く開くことができます。1つのプロセスで複数のドキュメントを開くこと が可能です。複数のプロセスでは、ドキュメントを多重に開くことができます。読み込み専用モードで同じドキュメントを必要な回数だけ開くことができます。 しかし、読み/書きモードでは、一度に同じドキュメントを2つ開くことはできません。

Open documentCreate document そして Append document コマンドを使用してドキュメントを開きます。Create documentAppend document コマンドは、自動的にドキュメントを読み/書きモードで開きます。Open document コマンドを使用する場合のみ、開くモードを選択できます。ドキュメントが開くと、ドキュメントから読み込みをしたり、ドキュメントへ書き出しをしたりできます (RECEIVE PACKET SEND PACKET コマンドを参照) 。ドキュメントでの作業が終了したら CLOSE DOCUMENT コマンドを使用してドキュメントを閉じます。

全ての開かれたドキュメントは、Open documentCreate document そして Append document コマンドから返されたDocRef式 を使用して参照されます。DocRefは開かれたドキュメントを識別するために使用します。DocRefは時間タイプの式です。開かれたドキュメントを操 作する全てのコマンドは、引数としてDocRefを受け取ります。誤ったDocRefをこれらのコマンドの1つに渡すと、ファイルマネージャエラーが発生 します。

注: プリエンプティブ・プロセスからコールされた場合に生成される DocRef 参照は同プリエンプティブ・プロセスでのみ使用可能です。コオペラティブ・プロセスからコールされた場合に生成される DocRef 参照は別のコオペラティブ・プロセスでも使用可能です。

ドキュメントにアクセス (開く、閉じる、削除する、名前を変更する、コピーする) したり、ドキュメントのプロパティを変更したり、ドキュメントで文字を読んだり書いたりすると、I/Oエラーが発生することがあります。ドキュメントが見つからないこともありますし、ロックされていることもあります。また、書き込みモードで既に開いていることもあります。ON ERR CALLを用いてインストールされたエラー処理メソッドで、これらのエラーを検知することができます。システムドキュメントを使用している間に発生するほとんどのエラーに関しては、で説明しています。

コマンドOpen documentCreate documentAppend documentそしてSelect documentを使用して、標準的なファイルを開くまたは保存するダイアログボックス経由でドキュメントへアクセスできます。 標準ダイアログを通してドキュメントにアクセスすると、Documentシステム変数にドキュメントの完全なパス名が返されます。このシステム変数は、コマンドの引数リストに表示される引数documentと区別されなければなりません。

Document システム変数についてのより詳細な情報については、システム変数 の章に説明があります。

この節にある、ドキュメント名の必要なほとんどのルーチンでは、ドキュメント名とパス名の両方を使用できます (特に指定された場合は例外) 。名前を渡した場合、コマンドはデータベースのフォルダ内でドキュメントを探します。パス名を渡した場合、それは有効でなければなりません。

正しくない名前やパス名を渡した場合、コマンドはファイルマネージャエラーを発生させます。このエラーはON ERR CALL メソッドを使用して検知することが可能です。

4Dのメソッドエディタではエスケープシーケンスの使用が可能です。エスケープシーケンスとは、文字 列のセットで、"特殊" 文字を置き換えるために使用します。シーケンスはバックスラッシュ(\: 日本語フォント環境では円マーク) で始まり、その後に文字が続きます。例えば、\t は、Tab 文字のエスケープシーケンスになります。

Windowsでは、\文字を使用して、パス名を区切ります。4Dでは、ほとんどの場合、シングルバックスラッシュをダブルバックスラッシュに置き換えることによって、Windowsのメソッドエディタに入力されているパス名を、正確に判断します。例を挙げると、C:\FolderC:\\Folderとなります。
しかし、C:\MyDocuments\Newと書くと、4DはC:\\MyDocuments\Newと表示します。この場合、2番目の \ は、\N (存在しているエスケープシーケンス) として正確に判断されません。従って、4Dで識別されているエスケープシーケンスの1つで使用される文字の前にバックスラッシュを挿入したいときは、手入力で\\を入力しなければなりません。

4Dは次のエスケープシーケンスを識別します。

エスケープシーケンス置き換え文字
\nLF (New line)
\tHT (Horizontal tab)
\rCR (Carriage return)
\\\ (Backslash)
\"" (Quotes)

ドキュメントやフォルダーを管理する4Dコマンドは多くの場合相対パスと絶対パスの両方をサポートします:

  • 相対パス名 はディスク上の任意のディレクトリを起点とし、そこから目的のファイルやフォルダーまでの位置関係を記述するものです。4Dの場合、通常相対パスの起点はデータベースフォルダー、つまりストラクチャーファイルが格納されているフォルダーとなります。
  • 絶対パス名 はボリュームのルートを起点として場所を記述します。データベースフォルダーの所在場所は関連しません。

コマンドに渡されるパス名が相対・絶対どちらで解釈されるべきかを決定するため、4Dは各プラットフォームごとに特定のアルゴリズムを適用します。

Windows  

絶対パスと解釈されるケース

  • パス名が二文字だけで構成され、二文字目がコロンの場合 ':'
  • パス名の二文字目と三文字目がそれぞれコロンとバックスラッシュ (円マーク) の場合
  • パス名が "\\" で始まる場合

その他のケースはすべて相対パスと解釈されます。

CREATE FOLDERコマンドの例題:

 CREATE FOLDER("Monday") // 相対パス
 CREATE FOLDER("\Monday") // 相対パス
 CREATE FOLDER("\Monday\Tuesday") // 相対パス
 CREATE FOLDER("c:") // 絶対パス
 CREATE FOLDER("d:\Monday") // 絶対パス
 CREATE FOLDER("\\srv-Internal\temp") // 絶対パス

Mac OS  

相対パスと解釈されるケース

  • パス名がディレクトリ区切り文字 ':' で始まる場合
  • パス名がディレクトリ区切り文字を含まない場合

それ以外のケースはすべて絶対パスです。

CREATE FOLDERコマンドの例題:

 CREATE FOLDER("Monday") // 相対パス
 CREATE FOLDER("macintosh hd:") // 絶対パス
 CREATE FOLDER("Monday:Tuesday") // 絶対パス (Mondayがボリューム名)
 CREATE FOLDER(":Monday:Tuesday") // 相対パス

  • 起動しているプラットフォームを検知する

プラットフォームの仕様上の違いに基づく複数のコーディングを避けるために、4DはMAP FILE TYPESのようなコマンドを提供していますが、ディスク上のドキュメントを処理するような低レベルで作業を開始するときは (例えば、プログラミングでパス名を取得するなど) 、MacintoshまたはWindowsのプラットフォームのどちらで起動しているかを知る必要があります。

次のOn Windowsプロジェクトメソッドは、データベースがWindows上で起動しているかどうかをテストします。

  // On Windows プロジェクトメソッド
  // On Windows -> ブール
  // On Windows -> WindowsであればTrue
 
 C_BOOLEAN($0)
 $0:=(Folder separator="\\")

  • 正しいディレクトリ区切り記号を使用する

Windowsではディレクトリレベルをバックスラッシュ(\) によって表します (日本語フォント環境では円マーク)。Macintoshはフォルダレベルをコロン(:) によって表します。どちらのプラットフォームで起動しているかに基づいて、次のDirectory symbolプロジェクトメソッドは、正確なディレクトリ記号(文字) のコードを返します。

  // Directory symbol プロジェクトメソッド
  // Directory symbol -> 整数
  // Directory symbol -> "\" (Windows) または ":" (Mac OS)のコード
 
 C_LONGINT($0)
 
 If(On Windows)
    $0:=Character code("\\")
 Else
    $0:=Character code(":")
 End if


互換性に関する注意: 4Dバージョン12より、Folder separator定数 (System Documentsテーマ) を使用して、OSに左右されない有効なパス名を構築することをお勧めします。この定数は自動でOSに対応する区切り文字を返します (Unicodeモードのみ)。
  • 長い名前からファイル名を抽出する

長いドキュメント名を取得してしまうと(パス名+ファイル名) 、その長い名前からドキュメントのファイル名を抽出しなければならないことがあります。例えば、ウィンドウのタイトルにその名前を表示する場合などです。Long name to file name プロジェクトメソッドは、WindowsとMacintoshの両方でこれを実行します。

  //Long name to file name プロジェクトメソッド
  //Long name to file name ( 文字列 ) -> 文字列
  //Long name to file name ( Long file name ) -> file name
 
 C_TEXT($1;$0)
 C_LONGINT($viLen;$viPos;$viChar;$viDirSymbol)
 
 $viDirSymbol:=Directory symbol
 $viLen:=Length($1)
 $viPos:=0
 For($viChar;$viLen;1;-1)
    If(Character code($1[[$viChar]])=$viDirSymbol)
       $viPos:=$viChar
       $viChar:=0
    End if
 End for
 If($viPos>0)
    $0:=Substring($1;$viPos+1)
 Else
    $0:=$1
 End if
 If(<>vbDebugOn) //On Startupデータベースメソッドで、変数をTrueまたはFalseで設定する。
    If($0="")
       TRACE
    End if
 End if

  • 長い名前からパス名を抽出する

長いドキュメント名を取得してしまうと(パス名+ファイル名) 、その長い名前からドキュメントが置かれているディレクトリのパス名を抽出しなければならないことがあります。例えば、同じ場所にドキュメントを追加して保存したい場合などです。Long name to file name プロジェクトメソッドは、WindowsとMacintoshの両方でこれを実行します。

  //Long name to path name プロジェクトメソッド
  //Long name to path name ( 文字列 ) -> 文字列
  //Long name to path name ( Long file name ) -> Path name
 
 C_TEXT($1;$0)
 C_LONGINT($viLen;$viPos;$viChar;$viDirSymbol)
 
 $viDirSymbol:=Directory symbol
 $viLen:=Length($1)
 $viPos:=0
 For($viChar;$viLen;1;-1)
    If(Character code($1[[$viChar]])=$viDirSymbol)
       $viPos:=$viChar
       $viChar:=0
    End if
 End for
 If($viPos>0)
    $0:=Substring($1;1;$viPos)
 Else
    $0:=$1
 End if
 If(<>vbDebugOn) //On Startupデータベースメソッドで、変数をTrueまたはFalseで設定する。
    If($0="")
       TRACE
    End if
 End if



参照 

Append document
CLOSE DOCUMENT
COPY DOCUMENT
Create document
CREATE FOLDER
DELETE DOCUMENT
Document creator
DOCUMENT LIST
Document type
FOLDER LIST
Get document position
GET DOCUMENT PROPERTIES
Get document size
MAP FILE TYPES
MOVE DOCUMENT
Open document
Select document
SET DOCUMENT CREATOR
SET DOCUMENT POSITION
SET DOCUMENT PROPERTIES
SET DOCUMENT SIZE
SET DOCUMENT TYPE
System Documents
Test path name
VOLUME ATTRIBUTES
VOLUME LIST

 
プロパティ 

プロダクト: 4D
テーマ: システムドキュメント

 
履歴 

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)