パスネームの扱い方


○ UNIX スタイルのパスネーム

 RunRev はマルチプラットホーム対応であるため、ファイルのパスネームも独特の扱いをします。と言っても、基本となるのは UNIX で使われているスラッシュ(/)区切りのパスです。

 絶対パス(フルパス)はスラッシュから始まります。こんな感じです。"/myHDD/docFolder/doc.txt"

 相対パスは、スラッシュを付けずに書きます。例えばこんな感じです。 "docFolder/doc.txt"

 「相対パス」とは、あるフォルダを基準とした、「部分的な」パス指定のことです。 RunRev では、後述する the defaultFolder の指すフォルダを基準にします。

 どの OS 上であっても、例えば answer file や answer folder で得られるのは、UNIX 形式のパスネームです。そのため OS の違いは特に気にする必要はありません。ただし、パスネーム文字列を加工したりする場合は注意が必要です。


○ マック形式のパスと UNIX 形式のパス

 HyperTalk でパスの一部を切り出す時は、item などを使って

      set the itemDelimiter to ":"
      put last item of pathName into filName
      set the itemDelimiter to ","
のような処理をしていました。 RunRev 上ではパスデリミタが "/" ですから、同じ処理をするのに
      set the itemDel to "/"
      put last item of pathName into filName
とする必要があります。ちなみに the itemDel はローカルプロパティ(ハンドラ内のみ有効)なので、同じハンドラ内で item を使っていない限り、わざわざ "," に戻す必要はありません。


○ パスネームの変換

 UNIX 形式のパスからマック形式のパスが欲しいことがあります。例えば AppleScript や xcmd にフルパスネームを渡すときは、マック形式である必要があります。これには revMacFromUnixPath 関数が使えます。この関数にパスネームを渡すと、例えば "/myHDD/docFolder/doc.txt" が "myHDD:docFolder:doc.txt" に変換されます。

 マックではファイルやフォルダに "/" を含んだ名前を付けることが出来ますが、これは UNIX 形式のパスネームに合いません。そこで、RunRev はこれを ":" に変換します。例えば answer file を使ってマック上にある "myHDD:docFolder:doc/1.txt" というファイルのパスネームを得ると、"/myHDD/docFolder/doc:1.txt" という文字列が返ってきます。つまりマック上にある "doc/1.txt" ファイルは、RunRev 上では "doc:1.txt" という名前で呼ばなければいけないわけです。

 逆に AppleScript や xfcn から得たマック形式のパスネームを UNIX 形式のパスネームに変換したい時は、revUnixFromMacPath 関数を使います。この関数を通すと、"myHDD:docFolder:doc/1.txt" が "/myHDD/docFolder/doc:1.txt" に変換されます。

 Windows ではパスの区切りに \ を使いますが、特に変換関数は用意されていないようです。 Windows 形式のパスから UNIX 形式のパスに変換するには replace "/" with "\" in pathName を、逆の場合は replace "\" with "/" in pathName を行えばいいでしょう。???


○ デフォルトフォルダという概念

 RunRev には the defaultFolder というプロパティがあり、いくつかのコマンドや関数はこのフォルダを基準にします。例えば files 関数はこのフォルダの中のファイルをリストアップするし、ファイルパスが必要な部分にファイル名だけを書くと、このフォルダの中のものとして扱われます。

 RunRev でスタックを開いた直後なら、defaultFolder は「 RunRev アプリケーションの入っているフォルダ」のパスネーム、スタンドアローンを開いた直後は、「スタンドアローンの入っているフォルダ」のパスネームになっています。 RunRev ではフォルダのパスを示すのに末尾に "/" は付けないので、これらのパスネームの最後はフォルダ名で終わっています。

 デフォルトフォルダの値は set the defaultFolder to ... で変更することが出来ます。指定したフォルダが以後デフォルトのフォルダになります。

 下の関数を使って、スタックファイルのあるフォルダのパスネームを得ることが出来ます。
function getMyFolder
   set the itemDel to "/"
   get the fileName of this stack
   delete last item of it
   return it
end getMyFolder
 the fileName of this stack はカレントスタックのフルパスネームです。 HyperTalk の the value of word 2 of the long name of this stack に相当します。ここから名前の部分を削って、スタックファイルのあるフォルダのフルパスネームを得ています。
 そして
    set the defaultFolder to getMyFolder()
を実行すると、以後スタック(またはスタンドアローン)のあるフォルダがデフォルトフォルダになります。

 パスネームを必要とするところに相対パス(頭に "/" を付けない)を書くと、このフォルダの中のファイルやフォルダとみなされます。例えばこの階層にある "data" フォルダにある "doc.txt" ファイルは、"data/doc.txt" でアクセスすることが出来ます。

 また、この "data" フォルダをデフォルトフォルダにしい場合は、
   set the defaultFolder to ( getMyFolder() &"/data" )
とします。これで "data" フォルダの中のファイルを、"docFile.txt" のようにファイル名だけ(これも一種の相対パス)でアクセス出来るようになります。

 デフォルトフォルダと同じ階層にあるフォルダは "../" を使った相対パスでアクセスすることが出来ます。例えば "data" フォルダと同じ階層にある "images" フォルダの "image.jpg" にアクセスするには、"../images/image.jpg" という相対パス(頭に "../" を付ける)が使えます。


○ URL 形式のパスネーム

 URL で使われるパスネームでは、一部の記号が置き換えられます。例えば半角スペースを含んだ "top page.html" は、"top+page.html" と表記します。また "~myPage" は "%7EmyPage" と書く必要があります。

 これらのファイル名(やディレクトリ名)を普通の表記に戻すには、URLDecode 関数を使います。 RunRev の long files 関数はファイル名部分を URL 形式で返して来るので、このファイル名を普通の表記に戻すときにも使えます。

 逆に普通の文字列を URL 形式の文字列に変換したい時は、URLEncode 関数が使えます。



2002.11.09
UDI

inserted by FC2 system