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 号码,使用与上面讨论的完全相同的交互规则。