ファイルとフォルダの参照
SenseTalkは、ファイルやファイルシステムを操作するためのいくつかの方法を提供しています。ここで説明するコマンドと関数を使用して、ファイルやファイルシステムの情 報にアクセスしたり、作業ディレクトリを決定したり変更したり、パスやディレクトリについての詳細を確認したりできます。また、ファイルサイズや割り当てられた権限など、個々のファイルのプロパティにもアクセスすることができます。
ファイルやファイルシステムオブジェクトを操作するためのSenseTalkのコマンドと関数は、テスト対象のシステム(SUT)ではなく、ローカルマシンで動作します。
以下の例では、SenseTalkを使用してファイルやファイルシステムの情報にどのようにアクセスするかを示しています。ファイルの作成や削除、ファイルへの書き込み、ファイルやファイルシステムオブジェクトの変更方法については、ファイルとフォルダの相互作用を参照してください。
ベストプラクティスとして、SenseTalkスクリプト内で参照されるすべてのファイルは、スイートウィンドウ内のリソースペインを通じてEggplant Functionalに追加するべきです。この方法は、指定されたスイートのスイートディレクトリ内のリソースディレクトリにファイルを保存します。SenseTalkはローカルファイルシステム上の他の場所に保存されたファイルにアクセスすることができますが、リソースディレクトリを使用すると追加の機能が提供されます。詳細については、リソースペインを参照してください。
スクリプト内でファイルを参照する
type code
スクリプト内でファイルを参照するには、単に file
という単語に続けてファイルの名前となる式を使用します。 folder
という単語を file
の代わりに使用することて、同様にフォルダを参照することもできます。
Syntax:
file filePath
folder filePath
directory filePath
folder
とdirectory
の単語はSenseTalkスクリプト内で交互に使用されます。スクリプト内でfolder
の単語が使用されている場所で、代わりにdirectory
の単語を使用することができます。
_filePath_は、Mac/Linux形式またはWindows形式のパスのテキスト、またはパスの各コンポーネントが一つのアイテムであるリストとすることができます。
指定する名前は、ファイルまたはフォルダの完全な(絶対)パス名、または現在の作業フォルダに対する相対パスとすることができます( the folder
グローバルプロパティを参照)。SenseTalkは、次のルールに従って、指定された名前に基づいてファイルの完全な「絶対」パス名を決定します:
- 名前がスラッシュ (/) で始まるか、パスリストの最初のアイテムが "/" であれば、それは既に絶対ファイル名です
- 名前がドライブレターとコロンに続くスラッシュ(例: "C:\")で始まるか、パスリストの最初のアイテムがドライブレターとコロンで、2番目のアイテムがスラッシュであれば、それは既に絶対ファイル名です
- 名前がチルダとスラッシュ (~/) で始まる場合、それはユーザーのホームフォルダに対する相対パスを表します
- 名前がチルダ (~) に続くユーザー名で始まる場合、それはその特定のユーザーのホームフォルダに対する相対パスを表します
- 名前がピリオドとスラッシュ (./) または二つのピリオドとスラッシュ (../) で始まる場合、それは現在の作業フォルダまたはその親フォルダからの相対パスを表します
- それ以外の場合、それは現在の作業フォルダ内のファイルまたはパスを表します
fileDescription()
関数を使 用して、ファイルまたはフォルダに関する情報パケットを取得します。返される値はfileDescriptionオブジェクトです。fileDescriptionは、テキストとして表示される場合、ファイルの短い名前として現れるSenseTalkオブジェクト(プロパティリスト)ですが、そのフルパスを知っており、また、ファイルに関する多くの追加情報も含んでいます。
Example:
open file"/etc/passwd"
move file "runlog24" into folder "archivedLogs"
Folder
, Directory
関数
挙動: 指定したファイルパスの親フォルダを返します。
folder
関数(またはその同義語、directory
)を使用して、指定したファイルまたはフォルダを含むフォルダへのパスを取得します。
返される値は、スラッシュで終わります。ただし、the folderNamesEndWithSlash
グローバルプロパティが false に設定されている場合は除きます。スラッシュで終わることで、単にファイル名を追加するだけでフルパス名を作成することが容易になります。
Syntax:
{the} folder of filePath
folder( filePath )
指定された filePath(以下のSyntaxを参照)が絶対パスでない場合、それは現在の作業フォルダに対する相対パスとして扱われます。これは the folder
グローバルプロパティで示されます。folder
関数は、fileDescription
オブジェクト( files()
や fileDescription()
関数の返り値など)またはスクリプトファイルオブジェクトを引数に呼び出すこともできます。これにより、指定されたファイルの親フォルダを取得します。
フォルダ関数によって返される値は、実際には fileDescription
オブジェクトですが、ほとんどの目的では単に文字列として扱うことができます。その文字列値はフォルダへのフルパスです。
例:
put the folder of myFile into myFolder
put folder(someFile) & "siblingFileName" into newFile
LastPathComponent
関数
挙動: ファイル名からファイル拡張子を返します。
lastPathComponent
関数は、ファイルまたはフォルダのフルパス名がある場合に使用します。そして、フルパスなしで、ただローカル名を取得したい場合に使用します。
Syntax:
{the} lastPathComponent of filePath
lastPathComponent( filePath )
例:
put the lastPathComponent of fullPath into fileName
put lastPathComponent("/Users/jc/Documents/Jan24.data") -- "Jan24.data"
FileExtension
関数
挙動: ファイルパスを、標準フォーマットの個々のパスコンポーネントのリストとして返します。
fileExtension
関数は、ファイルまたはフォルダのフルネームがある場合に使用します。そして、ただファイル拡張子を取得したい場合に使用します。拡張子は名前の最後のピリオド以降の部分です。ピリオドは返される拡張子には含まれません。
Syntax:
{the} fileExtension of fileName
fileExtension( fileName )
例:
put the fileExtension of fileName into extension
put fileExtension("/Users/jc/Documents/Jan24.data") -- "data"
PathList
関数
挙動: filePath
関数は、ファイルパスを標準(Mac/Linux/web)フォーマットの文字列として返し、パスコンポーネント間のセパレータとしてスラッシュを使用します。windowsFilePath
関数は同様ですが、コンポーネント間のセパレータとしてバックスラッシュを使用して、ファイルパス文字列をWindowsフォーマットで返します。
pathList
関数は、ファイルまたはフォルダのフルまたは部分的なパス名がある場合に使用します。そして、そのパスの個々のコンポーネントを標準フォーマットで含むパスリストを取得したい場合に使用します。
Syntax:
{the} pathList of filePath
pathList( filePath )
例:
put the pathList of filePath into filePathList
put pathList("/Users/sj/Documents/MLK.txt") --[/,Users,sj,Documents,MLK.txt]
FilePath
, WindowsFilePath
関数
挙動: ファイルパスを"解決済み"標準形式の文字列として返し、それは必要に応じて現在のフォルダを考慮したファイルへのフル絶対パスであり、".."や"~"のようなコンポーネントを解決します。
filePath
またはwindowsFilePath
関数は、ファイルまたはフォルダのフルまたは部分的なパス名が任意の形式である場合に使用します。そして、パスコンポーネント間にスラッシュを使用する標準のMac/Linux/UNIXテキスト表現、またはパスコンポーネント間にバックスラッシュを使用するWindowsテキスト表現を取得したい場合に使用します。
Syntax:
{the} filePath of filePath
filePath( filePath )
{the} windowsFilePath of filePath
windowsFilePath( filePath )
例:
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"
ResolvedFilePath
関数
挙動: ファイルシステムオブジェクトのローカル名を返し、親フォルダへのパスを除去します。
resolvedFilePath
関数は、ファイルまたはフォルダの完全な実際のパスを決定したい場合に使用します。ユーザーのホームフォルダを参照する"~"や任意のフォルダの親フォルダを参照する".."などのパスメカニズムのため、すべてが同じ場所を参照する複数の異なるパスが可能であるためです。resolvedFilePathは、同じファイルを表しているかどうかを確認するためにパスを比較するために使用できるパスの標準表現を取得するために使用できます。
Syntax: {the} resolvedFilePath of filePath
resolvedFilePath( filePath )
例:
put the resolvedFilePath of fileName into resolvedName
if resolvedFilePath(it) is resolvedFilePath(saveFile) then
//Do things
end if
FileDescription
関数
挙動: 与えられたファイルに関する情報を含むfileDescriptionオブジェクトを返します。
copy file
やrename
のようなファイルを操作するSenseTalkのコマンドや関数、またはdiskSpace()
関数は、ファイル名の代わりに使用されるfileDescriptionオブジェクトを認識し、実際のファイルを識別するために長い名前を使用します。このようにして、fileDescriptionオブジェクトは、変数に保存したり、パラメータとして渡したりすることができるファイル識別子として機能します。
Syntax:
{the} fileDescription of filePath
fileDescription( filePath )
_filePath_は、ファイルへのフルパス、または現在の作業フォルダに対するファイル名である場合があります。返される値は、fileDescriptionオブジェクトです(objectTypeが“fileDescription”に設定されたプ ロパティリスト)。fileDescriptionオブジェクトには、ファイルのローカル名に設定されたasTextプロパティが含まれているため、オブジェクトを表示すると、単にファイルの名前が表示されます。
#filedescription
FileDescriptionオブジェクトは、
objectType
が「fileDescription」に設定されたプロパティリストです。fileDescriptionオブジェクトには、ファイルのローカル名に設定されているasText
プロパティが含まれており、オブジェクトを表示すると単にファイル名が表示されます。
各fileDescriptionオブジェクトは、さらに多くの追加情報を保持しています。特に、“long name”プロパティは、ファイルのフルパス名を含みます。他のプロパティには、ファイルが配置されている親フォルダ、ファイルサイズ、所有者、パーミッションなどの情報が含まれます。利用可能な情報を正確に把握するには、keys()関数を使用するか(またはオブジェクトのasTextプロパティを表示する前に削除します)。copy file
やrename
といったSenseTalkのコマンドや、ファイルと共に働くdiskSpace()
関数などは、ファイル名の代わりに使われるfileDescriptionオブジェクトを認識し、実際のファイルを識別するためにlong nameを使用します。このように、fileDescriptionオブジェクトは、変数に格納されたり、パラメータとして渡されたり、などの方法でファイル識別子として機能します。
fileDescriptionオブジェクトは、files()
やfolders()
のような関数からも取得できます。これらはいずれもfileDescriptionsのリストを返します。
例:
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
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が含まれます。
そのユーザーのホームフォルダへのパスを取得するために、ユーザーのログイン名に続いてチルダ(~)を使って関数を呼び出します。これは、下の第二の例で示されています。
フォルダのドメインを指定するために、オプションの二番目のパラ メータを与えることができます。_domainName_は、次のいずれかにすることができます: user, local, network, system, または all。allのドメインが指定された場合、複数のパスがリストとして返される場合があります。ドメインが指定されていない場合、リクエストされたフォルダに適したドメインが想定されます。
構文:
specialFolderPath( folderName {, domainName} )
{the} specialFolderPath of folderName
{the} [temporary | temp | home | documents | desktop] folder
Example:
put specialFolderPath("applications") -- "/Applications"
Example:
put specialFolderPath("~brenda") -- "/Users/brenda"
Example:
put specialFolderPath("library", "local") -- "/Library"
よく使われるフォルダについては、以下に示すようなシンプルな代替構文を使用することができます。このオプションは、一時(temp)、ホーム、ドキュメント、およびデスクトップフォルダでのみ動作します。
Example:
put the temporary folder -- 現在のユーザーの一時フォルダのパスを返す
put the home folder -- "/Users/<user_name>" where <user_name> is the name of the current user
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 directory | ファイルを含むフォルダのフルパス名 |
size | ファイルのサイズ(バイト単位) |
creation date | ファイルが作成された日時 |
modification date | ファイルが最後に変更された日時 |
permissions | ファイルのパーミッションを示す文字列(以下参照) |
owner permissions | ”read”, “write”, および “execute” |
group permissions | ”read”, “write”, および “execute” |
other permissions | ”read”, “write”, および “execute” |
locked immutable | ファイルのロック状態 |
entry type | “File”, “Folder”, “SymbolicLink”, “Socket”, “CharacterSpecial”, “BlockSpecial”, または “Unknown” |
owner name | ファイル所有者のユーザーID番号 |
group name | ファイル所有者のグループID番号 |
owner id | ファイルの所有者のログイン名 |
group id | ファイルが所有しているグループの名前 |
link destination | シンボリックリンクの場合、リンク先ファイルの相対パス名 |
パーミッションプロパティは、Unixのls -l
コマンドで報告されるものと同様の文字列で、9文字のrwxrwxrwx
で所有者、グループ、およびその他の読み取り、書き込み、および実行権限を示します。存在しないパーミッションはダッシュに置き換えられるため、パーミッションの値がrwxr-xr-x
の場合、たとえば、所有者のみが書き込み可能で、すみなが読み取り可能で実行可能なファイルを示します。特別なパーミッションフラグは、それらが適用される場合にカンマで区切られた追加の項目で示されます。これには、setuid
、setgid
、およびsticky
が含まれます。したがって、setuidファイルのパーミッション値は、rwxr-xr-x,setuid
になる可能性があります。
プロパティ作成日、変更日、所有者のパーミッション、グループのパーミッション、その他のパーミッション、パーミッション、タイプコード、クリエーターコード、所有者ID、およびグループIDは、(set
コマンドを使用して)設定できるだけでなく、取得も可能です。他のすべてのファイルプロパティは読み取り専用です。
リンクのプロパティに直接アクセスするためには(リンク先のファイルまたはフォルダではなく)、ファイルまたはフォルダの代わりにリンクという単語を使用します。
フォルダプロパティの値は、the folderNamesEndWithSlash
グローバルプロパティがfalseに設定されていない限り、スラッシュで終わります。終わりのスラッシュは、ファイル名を単に追加することでフルパス名を作成するのが容易になります。
文法:
{the} fileProperty of [file | folder] fileName
例:
put the short name of file "/tmp/Friday.rtf"-- "Friday"
add the size of file datafile1 to filesizeTotal
ファイルまたはフォルダの存在を確認する
put fileInfo is a fileDescription -- true
there is a file
またはfile ... exists
オペレーターを使用してファイルが存在するかどうかを確認したり、それらの否定的な対応物を使用してファイルまたはフォルダが存在しないことを確認することができます:
文法:
there is a [file | folder] fileName [file | folder] fileName が存在する
ない [file | folder] fileName
[file | folder] fileName [は存在しない | 存在しない]
例:
if file "tempWorkFile" exists then delete file "tempWorkFile"
if there is a file "scores" then
put file "scores" into highScoreselse
put "100,100,100,100,100" into highScores
end if
// 既に存在しない場合は、空のデータファイルを作成します:
if there is no file "data" then put "" into file "data"
同じ方法でフォルダの存在を確認することもできます。
if folder "/tmp/work" does not exist then initWorkFolder