Futurebasic/語言/檔案資料夾
在許多 FB 語句和函式中,您需要指定特定檔案和/或特定目錄。目錄本質上是一個資料夾;此外,每個卷(基本上,每張磁碟)都有一個根目錄,其名稱與卷本身相同。目錄是一個容器;當您在 Finder 中雙擊資料夾圖示時,您會看到一個視窗,其中顯示該目錄的內容。同樣,當您雙擊捲圖標時,您會看到一個視窗,其中顯示該卷根目錄的內容。
隨著 MacOS 的發展,出現了許多不同的方案來指定檔案和目錄。FB 中的語句和函式使用一個系統,該系統包含三個不同的資訊片段,這些片段以有時微妙的方式相互作用。這些資訊片段是:路徑名稱、目錄引用編號和目錄 ID 號碼。
在 MacOS 中,路徑名稱是一個不超過 255 個字元的字串,由冒號和/或檔案和目錄的名稱組成,採用特定格式。它通常在手冊中的語法描述中標識為 path$。
- 一個完整路徑名稱以卷的名稱開頭,以該卷中的某個位置的檔案或目錄的名稱結尾。在兩者之間是導致從根級別到最終專案的目錄的分層列表;列表中的名稱由冒號分隔。如果列表中的最後一項是目錄,則可以選擇在它之後新增一個最後的冒號。完整路徑名稱始終至少包含一個冒號,但絕不以冒號開頭。僅由卷名稱後跟冒號組成的完整路徑名稱表示該卷的根目錄。
- 一個部分路徑名稱要麼以冒號開頭,要麼僅由單個專案的名稱組成,不包含冒號。它表示相對於某些“基本目錄”(下面討論)的分層目錄路徑。不包含冒號的部分路徑名稱表示基本目錄第一級上的專案。僅由冒號(不列出專案名稱)組成部分路徑名稱,指的是基本目錄本身。部分路徑名稱也可以以多個冒號開頭:一個前導雙冒號表示路徑從基本目錄的父目錄開始;一個前導三冒號表示路徑從基本目錄的“祖父母”開始,等等。
這是一個奇怪的概念,由於歷史原因,它可以根據其值以多種不同的方式解釋。它也可以解釋為表示卷,或者表示捲上的特定目錄,具體取決於另一個稱為“目錄 ID 號碼”(下面討論)的值。目錄引用編號始終儲存為“帶符號的短整數”編號,因此其值範圍為 -32768 到 +32767。它通常在手冊中的語法描述中標識為 refNum%。
注意:驅動器 ID 號碼在系統啟動時分配給每個磁碟驅動器。卷引用編號在卷被掛載時分配給每個卷,並在卷被解除安裝之前有效。工作目錄引用編號是在您的應用程式請求時分配給特定捲上的特定目錄的,並在您的應用程式“關閉”該目錄(如使用 CLOSE FOLDER 語句)或您的應用程式退出之前有效。
這是一個正數,MacOS 在目錄建立時永久分配給每個目錄。在任何給定捲上,沒有兩個目錄 ID 號碼相同;但是,兩個不同捲上的兩個目錄可能具有相同的目錄 ID 號碼。
在那些使用目錄 ID 號碼(OPEN、KILL、NAME、RENAME)的 FB 語句中,您可以使用兩種不同的技術來指定該編號
您可以將其顯式地指定為語句的引數。它通常在手冊中的語法描述中標識為 dirID&。如果您沒有顯式地指定它,FB 會使用您在 PARENTID 語句中指定的編號。如果您尚未執行 PARENTID 語句,FB 會使用零。此外,OPEN、KILL、NAME 和 RENAME 語句始終在語句執行後自動將 PARENTID 值重置為零。
注意:某些其他 FB 語句和函式(如 FOLDER)不使用目錄 ID 號碼,也不關注 PARENTID 值。換句話說:這些語句和函式始終表現得好像目錄 ID 號碼為零。
FB 以以下方式使用路徑名稱、目錄引用編號和目錄 ID 號碼來識別您指示的檔案或目錄
- 如果路徑名稱是完整路徑名稱,則忽略目錄引用編號和目錄 ID 號碼。該專案完全由路徑名稱指定。(請注意,如果有兩個已掛載的卷都具有相同的卷名稱,則完整路徑名稱可能會不明確。)如果路徑名稱是部分路徑名稱(或未指定),則目錄
- 引用編號和目錄 ID 號碼一起用於識別基本目錄。然後,透過部分路徑名稱識別的專案相對於該基本目錄定位(或者,如果未指定路徑名稱,則該專案就是基本目錄本身)。基本目錄的確定方式如下
- 如果目錄 ID 號碼為零,則基本目錄完全由目錄引用編號確定,具體取決於上表中的“目錄解釋”列。
- 如果目錄 ID 號碼為非零,則目錄引用編號和目錄 ID 號碼一起用於識別基本目錄。在這種情況下,基本目錄的卷由目錄引用編號指示(根據表中的“卷解釋”列),而目錄 ID 號碼識別該卷中的目錄。
在您對 MacOS 工具箱例程的呼叫中指定檔案或資料夾時,您並不總是需要使用上面討論的三個資料項。在許多工具箱呼叫中,標識檔案或資料夾的首選方式是透過檔案規範,這是一個 70 位元組的記錄,其中包含卷引用編號、目錄 ID 號碼和專案的名稱。要跟蹤可能不在當前已掛載捲上,或可能已被重新命名或移動到不同資料夾的專案,首選方法是使用別名記錄。請參閱 Inside Macintosh:Files,以詳細瞭解檔案規範和別名記錄。
請注意,許多 MacOS 工具箱例程也支援使用路徑名稱、目錄引用編號(通常稱為 ioVRefNum) 和目錄 ID 號碼,使用與上面討論的完全相同的互動規則。