このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

open for access の機能は何?

発言者:中村 真一郎
( Date Saturday, May 16, 1998 03:22:49 )


特にこまっているわけではないのですが,AppleScriptのコマンド

open for access / close access

というのは何のためにあるのか教えて下さい.
特にこれでアクセス開始を宣言しなくてもファイルを読めるみたいですし,
アクセス開始を宣言しないでファイルを読み込んでるスクリプトで
エラーがおこってもファイルが開っきっぱなしで使えなくなる.
ということもないみたいです.
これを使うと単にファイルに参照番号がつくというだけなのでしょうか?

現在使っているスクリプトが

open for access / close access

を使わないで,ファイルを扱っていて,特に問題ないようなのですが
気がつかないところで不具合の原因にならないかちょっと気掛かりです.
すごく基本的なことのようですが,どなたか教えて下さい.

参考にしているのは”AppleScript ミニミニリファレンス:こばやしゆたか著”です.

田中求之 さんからのコメント
( Saturday, May 16, 1998 11:01:22 )

必要を感じなければ、使わなくて済むものなんですが、たとえば、ファイルの先頭から
1行ずつ読み込みながら処理を行っていく、あるいは512バイトごとに区切って
取り出したい等の時には、open for でファイルを開いておいて、処理を行う
ことになります。

田中求之 さんからのコメント
( Saturday, May 16, 1998 11:19:54 )

実用性はないですが (^_^; 、ファイルの各行の文字列をひっくり返すスクリプトです。
1行ごとに読みこみますので、どんなに巨大なふぁいるであっても処理できます。

set mySrc to (choose file of type "TEXT") as string
set myDes to mySrc & ".rev"
set mySRef to open for access file mySrc
set myDRef to open for access file myDes with write permission
try
  repeat
    set myData to read mySRef until return
    set myData to (reverse of characters of myData) as string
    write myData to myDRef
  end repeat
on error
end try
close access mySRef
close access myDRef

このように、open for access で開いておくと、read は、「前回読み込んだ後から」
読み混みますし、write は、「前回書き込んだ後に続けて」書いていきます。

中村 真一郎 さんからのコメント
( Tuesday, May 19, 1998 23:14:21 )

田中求之さんどうもありがとうございます.
早速参考にしてスクリプトを手直ししてみました.
今までいちいち読み出し位置を計算していたことから開放されました.

ところが...
open for accessを使ってデスクトップ上にデータ受け渡しファイルを
作ろうとしたのですが,

tell application "Finder"
 open for access file "TEXT" of desktop
end tell

のようにすると,なぜかこのファイルがデスクトップでなく
システムフォルダの中に作られるのです.

〜of desktop of startup disk /〜of folder desktop

とか試しましたが,どうにも頑固で,システムフォルダに
ファイルを作らずにはいられないようなのです.

パスをきちんと書くとそこにファイルを作ってくれるようなのですが,
ファインダー型式のパス指定はダメなのでしょうか?

田中求之 さんからのコメント
( Wednesday, May 20, 1998 01:26:48 )

>ファインダー型式のパス指定はダメなのでしょうか?

基本的には使えません。 Finder の内部でしか通用しない形式だからです。そこで
以下のように、Finder 以外でも通用する形式に変換を行えばよいわけです。

tell application "Finder"
  set myFile to (file "Test" of desktop) as alias
end tell

これで、デスクトップにある Test というファイルのエイリアス型の情報が
得られますので、

set myRef to open for access myFile
....

と処理を続けることができます。

中村 真一郎 さんからのコメント
( Thursday, May 21, 1998 20:07:22 )

ありがとうございます.
早速やってみます.