ファイル名を引数とするすべてのTclコマンドとC関数は、ファイル名がプラットフォームに依存する3つの形式のうちの1つであることを仮定します。各プラットフォームにおいて、Tclはそのプラッ
トフォームで標準形式のファイル名をサポートします。加えてすべてのプラットフォームで単純なファイル名を構築する簡便な方法を提供するために、TclはUnix式の文法をサポートします。しかし、移植性を意識したスクリプトはファイル名に特定の形式を仮定しないほうがよいでしょう。代わりに移植性を持つスクリプトは、ファイル名を扱うためにfile splitとfile joinコマンドを使わなければなりません。
ファイル名は、ファイルを指定するために使われるパスの開始位置に基づく3つの一般
的なタイプに分類されます。
絶対的、相対的、そしてボリューム相対的です。絶対的な名前は完全に確定されます。これは特定のボリュームとそのボリュームのルートディレクトリからたどられるファイルパスです。相対的な名前は確定ではありません。相対的な名前は現在の作業ディレクトリからたどられるファイルパスを与えます。ボリューム相対的な名前は部分的に確定される現在のボリュームのルートディレクトリか、指定されたボリュームのカレントディレク
トリからたどられるパスです。 file pathtypeコマンドは与えられたパスのタイプを判定するために使えます。
ネイティブな名前に関するルールは、Tcl配列の要素tcl_platform(platform)の値に依存します。
- mac
- :
- MyFile
- MyDisk:MyFile
- :MyDir:MyFile
- ::MyFile
- :::MyFile
- /MyDisk/MyFile
- ../MyFile
- unix
- /
- /etc/passwd
- .
- foo
- foo/bar
- ../foo
- windows
- \\Host\share/file
- c:foo
- c:/foo
- foo\bar
- \foo
- \\foo
- mac
- AppleのMacintoshシステムには、Tclは2つの形式のパス名をサポートします。普通のMacスタイルの名前にはコロンをパス区切りとして使います。パスは相対的或いは絶対的で、ファイル名はコロンを除くあらゆる文字を含むことができます。先頭に1つのコロンがある場合は、残りのパスがカレントディレクトリに相対的であることを意味します。先頭にはコロンがないパスは絶対的なパスであることを意味します。パス内の2つ以上のコロンの連続出現は、どこであっても、相対的なパスを作成することを意味します。::は現在のディレクトリの親を参照し、:::は親の親を参照します。以下同様です。
-
- Macintoshスタイルの名前に加えて、TclはUnix式の名前のサブセットをサポートします。パスにはコロンがない場合、それはUnix式のパスであることを意味します。
スラッシュがパス区切りとして使われます。ファイル名". "は現在のディレクトリを参照し、".."は現在のディレクトリの親を参照します。しかし、"/"や"/.."のようないくつかの名前は、対応定義がなく、Macintoshスタイルの名前として解釈されます。基本的に、ファイル名を生成するコマンドはMacintoshスタイルの名前を返しますが、ファイル名を受け入れるコマンドはMacintoshとUnix式の名前ルールの両方を認めます。
- 次の例はパス名の様々形式を示しています。
- :
- 現在フォルダに対する相対パス。
- MyFile
- 現在フォルダにMyFileという名前のファイルに対する相対パス。
- MyDisk:MyFile
- MyDiskというデバイス上でMyFileというファイルに対する絶対パス。
- :MyDir:MyFile
- 現在フォルダのサブフォルダであるMyDirというフォルダにあるMyFileというファイ
ルに対する相対パス。
- ::MyFile
- 現在フォルダの親フォルダにあるMyFile
というファイルに対する相対パス。
- :::MyFile
- 現在フォルダの親親フォルダにあるMyFileというファイルに対する相対パス。
- /MyDisk/MyFile
- MyDiskというデバイス上でMyFileというファイルに対する絶対パス。
- ../MyFile
- 現在フォルダの親フォルダにあるMyFile
というファイルに対する相対パス。
- unix
- Unixプラットフォームでは、Tclは各部がスラッシュで区切られたパス名を使います。パス名は相対的か絶対的で、ファイル名はスラッシュを除くいかなる文字を含むことができます。ファイル名"/"や"/.."は特別で、現在のディレクトリと現在のディレクトリの親をそれぞれ表します。複数の隣接するスラッシュは単一の区切りとして解釈されます。 以下の例ではパス名の様々な形式を示します。
- /
- ルートディレクトリへの絶対パス。
- /etc/passwd
- ルートディレクトリのetcディレクトリにあるpasswdというファイルへの絶対パス。
- .
- 現在のディレクトリへの相対パス。
- foo
- 現在のディレクトリにあるfooというファイルに対する相対パス。
- foo/bar
- 現在のディレクトリにあるfooというディレクトにあるファイルbarに対する相対パス。
- ../foo
- 現在のディレクトリの親ディレクトリにあるfooというファイルに対する相対パス。
- windows
- MicrosoftのWindowsプラットフォームでは、Tclはドライブ相対とUNC式の名前の両方をサポートします。名前いずれかのタイプにおいても、
/と\の両方がディレクトリ区切りとして使用されます。ドライブ相対の名前では、絶対あるいは相対パスの前に省略可能なドライブ指定子を入れることができます。
UNC パスは一般的に"\\servername\sharename\path\file"形式に従い、少なくともサーバとシェアコンポーネント、即ち\\servername\sharenameを含みます。どちらの形式でも、ファイル名/や/..は特別で、現在のディレクトリと現在ディレクトリの親をそれぞれ表します。以下の例はパス名の様々な形式を示しています。
- \\Host\share/file
- ホストHostの共有ポイントshareのルー
トディレクトリにあるfileというファイルへの絶対UNCパス。
- 注意すべきなのは、このパスにfile dirnameを繰り返し使うと//Host/shareを得ますが、決して"/fB//Host/fR"を得られません。
- c:foo
- ドライブc上の現在ディレクトリにあるファイルfooへのボリューム相対パス。
- c:/foo
- ドライブcのルートディレクトリにあるファイルfooへの絶対パス。
- foo\bar
- 現在のボリュームの現在のディレクトリの fooというディレクトリにあるファイルbarへの相対パス。
- \foo
- 現在のボリュームのルートディレクトリにあるファイルfooへのボリューム相対パス。
- \\foo
- 現在のボリュームのルートディレクトリにあるファイルfooへのボリューム相対パス。これは有効なUNCパスではありません。従って先頭の余分なbackslasheが必要ではありません。
上記で示されたファイル名ルールに加えて、Tclはcsh 式のチルダ置換もサポートします。ファイル名がチルダで始まる場合、そのファイル名の最初の要素はユーザのホームディレクトリの場所に置換えられます。チルダの直後に区切りがあれば、$HOME環境変数と置き換えられます。そうでない場合は、チルダと次のスラッシュの間の文字列がユーザー名として採られ、そのユーザーのホームディレクト
リは置き換えに使われます。
MacintoshとWindowsプラットフォームでは、チルダの後ろにユーザ
名がある場合のチルダ置換はサポートされていません。これらのプラットフォームでユーザ名付きのチルダ置換を試みるとエラーが生成されます。ユーザ名が付かないチルダを含むファイル名はちょうどUnixのように、$HOME環境変数によって置き換えられます。
すべてのファイルシステムが大文字小文字を区別するわけではありません。
よって、スクリプトではファイル名の大文字小文字に依存するコードは避けるべきです。また、異なるデバイスでは許される文字セットも違うため、スクリプトは次のような特別
な文字を含まないファイル名を選ぶことは賢明です。 <>:"/\|。もっとも安全なアプローチは文字数字だけを含む名前を使うことです。またWindows
3.1では8文字を越えない根幹と3文字を越えない拡張子のファ
イル名だけをサポートします。
Windowsプラットホームで、ファイル名またパス名の長さに制限があります。長さが260文字を超える完全なパスまたファイル名は大部分のファイル操作にエラーをもたらします。
file, glob
current directory, absolute file name, relative file name, volume-relative file name, portability
Copyright © 1995-1996 Sun Microsystems, Inc.
Copyright © 1995-1997 Roger E. Critchlow Jr.
|