【问题标题】:the pathname-directory behave strange路径名目录行为奇怪
【发布时间】:2013-05-23 06:26:15
【问题描述】:

我使用 SBCL 1.1.4,发现 pathname-directory 的行为很奇怪:

说有一个路径名包含“..”,下面的例子很简单。 SBCL 将每个 ".." 转换为 ":UP"

(pathname-directory "a/b/../")
(:RELATIVE "a" "b" :UP)

(pathname-directory "a/../b/../")
(:RELATIVE "a" :UP "b" :UP)

问题来了:

(pathname-directory "C:/test/../")
;;=> (:ABSOLUTE "test" :UP)

(truename "C:/test/..")
#P"C:/test/../"

(pathname-directory (truename "C:/test/.."))
;;=> (:ABSOLUTE "test" "..")

(pathname-directory #P"C:/test/../")
;;=> (:ABSOLUTE "test" :UP)

在 truename 的返回值上调用 pathname-directory 时,“..”不会转换为“:UP”。 (truename "C:/test/..") 也返回#P"C:/test/../",那为什么".." 没有被转换呢?

【问题讨论】:

    标签: directory common-lisp sbcl pathname


    【解决方案1】:

    这似乎是 Windows 上的 SBCL 的问题。 /a/b/..的真名应该是/a/。相反,它似乎返回了对 .. 条目本身的引用。

    在 Linux 上,这就是你得到的:

    (truename "/etc/udev/..")
    #P"/etc/"
    

    我会将此作为错误报告给 SBCL 开发人员。

    【讨论】:

    • 也可以尝试运行(truename "c:/test/../") 吗?如果没有最后的斜线,您在技术上指的是一个名为 .. 的文件,而不是一个目录,因此可以认为该行为是未定义的。
    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多