ファイルやフォルダの参照
SenseTalkには、ファイルおよびファイルシステムを扱うための方法がいくつか用意されています。ファイルおよびファイルシステム情報へのアクセスや作業ディレクトリの決定または変更、パスおよびディレクトリに関するその他の詳細については、以下に説明するコマンドと関数をお使いいただけます。ファイルサイズや割り当てられているパーミッションなど、個別ファイルのプロパティにアクセスすることができます。
注:ファイルとファイルシステムオブジェクトを操作するためのSenseTalkコマンドと関数は、テスト対象システム(SUT)上ではなく、ローカルマシン上で機能します。
下の例では、SenseTalkを使ったファイルおよびファイルシステム情報へのアクセス方法を紹介しています。ファイルの作成または削除、ファイルへの書き込み、その他の方法によるファイルまたはファイルシステムオブジェクトの変更といったトピックについては、ファイルやフォルダとのやり取りをご覧ください。
スクリプト内でファイルを参照する
スクリプト内でファイルを参照するには、ファイル名として評価される式の前にfileという語を使用します。fileの代わりにfolderという語を使用すると、フォルダの参照も同様に行えます。
open file"/etc/passwd"
move file "runlog24" into folder "archivedLogs"
技術トピック |
構文: file ファイルパス folder ファイルパス directory ファイルパス |
ファイルパスに入れることができるのは、Mac/LinuxまたはWindows形式のパステキストか、各アイテムが個々のパス構成要素を表しているリストです。 |
与えるパス名は、ファイルまたはフォルダのフル(絶対)パス名でも、現在の作業フォルダ(the folderグローバルプロパティを参照)に対する相対パスでも構いません。与えられた名前を基に、下記のルールに従って、SenseTalkがファイルのフル「絶対」パス名を決定します。 |
|
|
|
|
|
|
注 |
SenseTalkスクリプト内では、folderとdirectoryという語は互いに交換可能です。スクリプトにおいてfolderが使われている箇所には、どこでも代わりにdirectoryを使うことができます。 |
folder、directory関数
振る舞い
与えられたファイルパスの親フォルダを返します。
使用場面
folder(またはそのシノニムであるdirectory)関数は、与えられたファイルまたはフォルダを格納しているフォルダのパスを取得するときに使用します。
返される値は、the folderNamesEndWithSlashグローバルプロパティがfalseに設定されていない限り、スラッシュで終わります。末尾にスラッシュがあると、ファイル名を追加するだけで簡単にフルパス名が作成できます。
例
put the folder of myFile into myFolder
put folder(someFile) & "siblingFileName" into newFile
技術トピック |
構文: the folder of ファイルパス folder(ファイルパス) |
与えられたファイルパスは、絶対パスでない場合、 the folderグローバルプロパティによって与えられる現在の作業フォルダに対する相対パスと見なされます。folder関数は、fileDescriptionオブジェクト(例、files()またはfileDescription()関数によって返されるオブジェクト)やスクリプトファイルオブジェクトを使って呼び出しても、その指定ファイルの親フォルダを取得することができます。 |
folder関数で返される値は、実際にはfileDescriptionオブジェクトですが、ほとんどの用途では単に文字列として扱うことができます。その文字列の値になるのは、フォルダのフルパスです。 |
lastPathComponent関数
振る舞い
親フォルダのパスを除いた、ファイルシステムオブジェクトのローカル名を返します。
使用場面
lastPathComponent関数は、ファイルまたはフォルダのフルパス名が分かっていて、フルパスなしのローカル名だけを得たいときに使用します。
例
put the lastPathComponent of fullPath into fileName
put lastPathComponent("/Users/jc/Documents/Jan24.data") -- "Jan24.data"
技術トピック |
構文: the lastPathComponent of ファイルパス lastPathComponent(ファイルパス) |
fileExtension関数
振る舞い
ファイル名からファイル拡張子を返します。
使用場面
fileExtension関数は、ファイルまたはフォルダの完全な名前が分かっていて、ファイル拡張子だけを得たいときに使用します。名前の中の、最後のピリオドに続く部分が拡張子になります。返される拡張子にピリオドは含まれません。
例
put the fileExtension of fileName into extension
put fileExtension("/Users/jc/Documents/Jan24.data") -- "data"
技術トピック |
構文: the fileExtension of ファイル名 fileExtension(ファイル名) |
pathList関数
振る舞い
ファイルパスを、標準形式の各パス構成要素のリストとして返します。
使用場面
pathList関数は、ファイルまたはフォルダのパス名の全部または一部が分かっていて、そのパス(標準形式)の各構成要素を含んだパスリストを得たいときに使用します。
例
put the pathList of filePath into filePathList
put pathList("/Users/sj/Documents/MLK.txt") --(/,Users,sj,Documents,MLK.txt)
技術トピック |
構文:the pathList of ファイルパス |
filePath、windowsFilePath関数
振る舞い
filePath関数は、パス構成要素間の区切り文字にスラッシュを用いた標準(Mac/Linux/web)形式の文字列でファイルパスを返します。windowsFilePath関数もこれと似ていますが、こちらが返すのは、構成要素間の区切り文字にバックスラッシュを用いたWindows形式のファイルパス文字列です。
使用場面
filePathまたはwindowsFilePath関数は、ファイルまたはフォルダのパス名の全部または一部が何らかの形式で分かっていて、そのパスを標準Mac/Linux/UNIXテキスト表現(パス構成要素間にスラッシュを使用)またはWindowsテキスト表現(パス構成要素間にバックスラッシュを使用)で得たいときに使用します。
例
put the filePath of fullPath into stdPath
put filePath "\wiki\en\Home") -- "/wiki/en/Home"
put windowsFilePath("/Admin/theo/x32.jpg") -- "\Admin\theo\x32.jpg"
put filePath of ("a","b","c") -- "a/b/c"
put windowsFilePath of ("a","b","c") -- "a\b\c"
技術トピック |
構文: {the} filePath of ファイルパス filePath(ファイルパス) {the} windowsFilePath of ファイルパス windowsFilePath(ファイルパス) |
resolvedFilePath関数
振る舞い
必要に応じて現在のフォルダを考慮し、「..」や「~」などの構成要素を解決した、ファイルの完全な絶対パスである、「解決済み」標準形式の文字列でファイルパスを返します 。
使用場面
resolvedFilePath関数は、ファイルまたはフォルダの実際のフルパスを決定したいときに使用します。ユーザーのホームフォルダを指す「~」や、任意のフォルダの親フォルダを指す「..」といったパス構造があるために、 複数の異なるパスがすべて同じ場所を指すという可能性があります。resolvedFilePath関数によって得られるパスの標準表現を使うと、例えば、パス同士を比較して、同じファイルを表すものかどうかを確認することができます。
例
put the resolvedFilePath of fileName into resolvedName
if resolvedFilePath(it) is resolvedFilePath(saveFile) then...
技術トピック |
構文: the resolvedFilePath of ファイルパス resolvedFilePath(ファイルパス) |
fileDescription関数
振る舞い
与えられたファイルに関する情報を格納したfileDescriptionオブジェクトを返します。
使用場面
fileDescription()関数は、ファイルまたはフォルダの情報一式を得たいときに使用します。返される値は、fileDescriptionオブジェクトになります。SenseTalkオブジェクト(プロパティリスト)であるfileDescriptionは、テキストとして表示された場合にはファイルのショートネームで表されますが、フルパスも把握しているほか、ファイルに関するその他の情報も多数格納しています。
例
put fileDescription("/tmp/data") into fileInfo
put fileInfo is a fileDescription -- true
put fileInfo -- "data"
put the long name of FileInfo -- "/tmp/data"
put fileInfo's NSFileSize into dataSize
技術トピック |
構文: the fileDescription of ファイルパス fileDescription(ファイルパス) |
ファイルパスは、ファイルのフルパスでも、現在の作業フォルダに対する相対ファイル名でも構いません。返される値は、fileDescriptionオブジェクト(objectTypeが「fileDescription」に設定されたプロパティリスト)です。fileDescriptionオブジェクトのasTextプロパティには、ファイルのローカル名が設定されるため、オブジェクトを表示すると単にそのファイル名だけが表示されます。
他にも、各fileDescriptionオブジェクトは、数々の情報アイテムを保有しています。特に、「long name」プロパティにはファイルのフルパス名が格納されているほか、 ファイルが位置している親フォルダを含んだプロパティや、ファイルサイズ、所有者、パーミッションなどの情報を含んだプロパティもあります。利用できる情報を正確に把握するには、keys()関数を使用します(もしくは、オブジェクトのasTextプロパティを削除してからオブジェクトを表示します)。
copy fileコマンド、renameコマンド、diskSpace()関数などの、ファイルを扱うSenseTalkコマンドや関数は、ファイル名の代わりに使われるfileDescriptionオブジェクトを認識し、ロングネームを利用して実際のファイルを識別します。このように、fileDescriptionオブジェクトは、変数に格納したり、パラメータとして渡したりできるファイル識別子として機能することができます。
fileDescriptionオブジェクトは、files()関数やfolders()関数からも得ることができます。これらが返すのは、fileDescriptionのリストです。
SpecialFolderPath関数
挙動:SenseTalkが実行されているホストコンピュータ上にある数々の特殊フォルダのファイルシステムパスをどれでも返します。
パラメータ:パスを取得したい特殊フォルダの名前。対応フォルダ:home、system、library、applications、demo applications、developer applications、admin applications、developer、users、documentation、documents、core services、desktop、caches、application support、fonts、preferences、temporary(temp)、root
ユーザーのホームフォルダのパスを取得するときは、チルダ(~)の後にユーザーのログイン名を付けて関数を呼び出します(下の2番目の例を参照)。
オプションの第2パラメータを与えると、フォルダのドメインを指定することができます。ドメインとして指定できるのは、user、local、network、system、allのいずれかです。allをドメインとして与えると、2つ以上のパスがリストの形で返されることがあります。ドメインを指定しない場合、リクエスト対象のフォルダに適したドメインが想定されます。
構文:
specialFolderPath(フォルダ名 {, ドメイン名})
例:
put specialFolderPath("applications") -- "/Applications"
例:
put specialFolderPath("~brenda") -- "/Users/brenda"
例:
put specialFolderPath("library", "local") -- "/Library"
ヒント:よく使われるいくつかのフォルダに関しては、以下のシンプルな構文を代わりに用いることができます。なお、このオプションが機能するのは、temporary(temp)、home、documentsおよびdesktopフォルダのみです。
例:
put the temporary folder -- 現在のユーザーのtemporaryフォルダのパスを返します
put the home folder -- "/Users/<user_name>"<user_name>には現在のユーザーの名前が入ります
put the documents folder -- "/Users/<user_name>/Documents"
put the desktop folder -- "/Users/<user_name>/Desktop"
ファイルプロパティにアクセスする
アクセスできるファイルまたはフォルダのプロパティは多岐にわたります。アクセス可能なプロパティは次のとおりです。
ファイルプロパティ名 |
説明 |
name |
ファイルの名前(例、「myFile.txt」) |
short name |
拡張子なしの名前(例、「myFile」) |
long name |
ファイルのフルパス名(例、「/tmp/myFile.txt」) |
display name |
ユーザーに表示される名前 |
folder
|
ファイルを格納しているフォルダのフルパス名 |
size |
ファイルサイズ(バイト) |
creation date |
ファイルが作成された日付/時刻 |
modification date |
ファイルが最後に変更された日付/時刻 |
permissions |
ファイルパーミッションを表す文字列(下記参照) |
owner permissions |
「read」、「write」および/または「execute」 |
group permissions |
「read」、「write」および/または「execute」 |
other permissions |
「read」、「write」および/または「execute」 |
locked
|
ロックのかかったファイルの状態 |
entry type |
「File」、「Folder」、「SymbolicLink」、「Socket」、「CharacterSpecial」、「BlockSpecial」または「Unknown」 |
type code |
HFSタイプコード(4文字の文字列) |
creator code |
HFSクリエータコード(4文字の文字列) |
owner name |
ファイル所有者のログイン名 |
group name |
ファイル所有グループの名前 |
owner id |
ファイル所有者のユーザーID番号 |
group id |
ファイル所有者のグループID番号 |
link destination |
リンク先ファイルの相対パス名(シンボリックリンクの場合) |
permissionsプロパティは、Unixのls -lコマンドで報告されるものと類似した文字列です。rwxrwxrwxの9文字から成り、それぞれが所有者、グループ、その他に対する読み取り、書き込み、実行パーミッションを示しています。存在しないパーミッションはダッシュで置き換えられます。したがって、例えばパーミッションの値がrwxr-xr-xであれば、読み取りと実行は誰でも可能、書き込みは所有者だけが可能なファイルを示します。特殊なパーミッションのフラグが適用されている場合は、区切りのコンマが付いた追加アイテムによって示されます。種類としては、setuid、setgidおよびstickyがあります。したがって、setuidファイルのパーミッション値であれば、rwxr-xr-x,setuidのようになります。
例
put the short name of file "/tmp/Friday.rtf"-- "Friday"
add the size of file datafile 1 to filesizeTotal
技術トピック |
構文:the ファイルプロパティ of [file | folder] ファイル名 |
creation date、modification date、owner permissions、group permissions、other permissions、permissions、type code、creator code、owner id、group idといったプロパティは、取得するだけでなく、設定することも可能です(setコマンドを使用)。その他のファイルプロパティはすべて、読み取り専用です。
(リンク先のファイルまたはフォルダではなく)リンクのプロパティに直接アクセスするには、fileやfolderの代わりにlinkという語を使用します。
フォルダプロパティの値は、the folderNamesEndWithSlashがfalseに設定されていない限り、スラッシュで終わります。末尾にスラッシュがあると、ファイル名を追加するだけで簡単にフルパス名が作成できます。
ファイルやフォルダの有無をチェックする
there is a file ファイル名またはfile ファイル名 exists演算子を使うと、あるファイルが存在しているかどうかをチェックすることができます。もしくは、ファイルやフォルダが存在しないことを明らかにするときは、否定的なthere is not a file ファイル名、there is no file ファイル名またはfile ファイル名 does not exist演算子を使います。
if file "tempWorkFile" exists then delete file "tempWorkFile"
if there is a file "scores" then
put file "scores" into highScores
else
put "100,100,100,100,100" into highScores
end if
-- dataファイルがまだ存在していない場合は空のdataファイルを作成します
if there is no file "data" then put "" into file "data"
フォルダの有無も、同様にチェック可能です。
if folder "/tmp/work" does not exist then initWorkFolder