Clozure CL中文版008:文件系统接口
Category:帮助手册文件系统接口
路径名
路径名扩展
物理路径名称字符串中的前导波形符(〜)以大多数shell的方式扩展:“ ~user/…”可用于引用以“user”用户的主目录为根的绝对路径名,并且~/…可以使用“ ”引用以当前用户的主目录为根的绝对路径名。
预定义的逻辑主机
Clozure CL为两个逻辑主机设置逻辑路径名转换:ccl和home。
该ccl逻辑主机是指在ccl目录中。它用于通过Clozure CL在内的多种用途:定位Clozure CL的源代码,require和provide,访问外国的功能信息,和Clozure CL建立过程。CCL_DEFAULT_DIRECTORY如果该变量存在,则将其设置为环境变量的值。否则,它将设置为包含堆映像文件的目录。
该home逻辑主机指的是用户的主目录。
路径名称字符串
namestrings的语法是在Common Lisp中实现定义的。便携式程序不能对它们做任何假设。(有关更多信息,请参阅Common Lisp标准的第19.1.1节。)
将名称字符串转换为路径名对象时,大多数实现似乎都遵循以下惯例:namestring中的点字符分隔pathname-name 和pathname-type。如果涉及到多个点,或者在名称串的开头或结尾出现点时,要做的事情就不那么清楚了:“ .emacs”是否描述了一个名称为的路径名nil,其类型是emacs什么?类似地,给定“ a.b.c”,问题是哪些部分被解析为路径名,哪些部分被解析为路径名类型?
从路径名对象生成名称字符串时(例如,在打印路径名时),Clozure CL会尝试通过转义可能用于分隔路径名组件的字符来避免某些潜在的歧义。用于引用或转义分隔符的字符是Unix系统上的反弹,是#\>Windows上的一个字符。因此,例如,“ a\\.b.c”具有名称“ab”并且类型为“c”,而“ab \\。c”具有名称“a”并且类型为“bc”。
要获取适合传递给操作系统命令的本机名称字符串,请使用该函数native-translated-namestring。
native-translated-namestring pathname-designator[功能]
此函数返回一个名称字符串,该名称字符串使用操作系统的本机约定表示路径名。任何引用或转义的特殊字符都将被删除。
例如,假设p是由其创建的路径名(make-pathname :name “a.b” :type “c”)。然后,(native-translated-namestring p)评估为“abc”。相比之下,(namestring p)评估为“a \\。bc”。
Lisp字符串不能与C字符串互换。Clozure CL提供了一种相当简单的方法,可以将lisp本地名称字符串转换为适合传递给外部函数的C样式字符串。
with-filename-cstrs ( {(var value)} * ){form} *[Macro]
适当地编码要用作外部代码的文件名的字符串。
在environemt中执行表单,其中每个 var绑定到堆栈分配的外部指针,该指针指向适合传递到需要文件名参数的外部代码的C样式字符串。
例如,可以通过以下方式使用此宏:
(with-filename-cstrs ((s (native-translated-namestring pathname))) (#_unlink s))
各种操作系统对于如何期望编码本机路径名字符串具有不同的约定。达尔文预计将被分解为UTF-8。Windows文件处理函数的Unicode变体需要UTF-16。其他系统只将它们视为不透明的字节序列。无论主机操作系统如何,此宏都可确保使用正确的编码。
在非Darwin和非Windows系统上,with-filename-cstrs 调用pathname-encoding-name以确定要使用的编码。
pathname-encoding-name[功能]
返回要使用的编码的名称 with-filename-cstrs。默认值为nil,表示使用:iso-8859-1。它可能会改变setf。
directory pathspec &key (directories t) (files t) (all t) (directory-pathnames t) (include-emacs-lockfiles nil) test(follow-links t) [功能]
Clozure CL directory使用许多关键字参数扩展了标准函数:
:files
如果为true,则在输出中包含常规(非目录)文件。默认为t。
:directories
如果为true,则包括输出中的目录。默认为 t。
:all
如果为true,则包括名称以输出中的点字符开头的文件和目录。(但请注意,从不包含名为“ .”或“ ..”的条目。)默认为t。
:follow-links
如果为true,则在输出中包含符号或硬链接的truenames; 如果为false,则包括链接文件名而不尝试解析它们。默认为t。
请注意,旧版HFS别名文件被视为纯文件。
:test
一个参数(路径名)的函数,如果路径名应包含在输出中,则该参数应返回true。
:include-emacs-lockfiles
如果为true,则.#something在输出中包含emacs样式的lockfiles(表单的符号链接)。默认为nil。
http://mip.i3geek.com