确保路径是 Racket 中的目录路径
Ensure that a path is a directory path in Racket
Racket 的路径库对文件和目录的处理方式略有不同。在基于 Unix 的 Racket 发行版中,目录末尾有一个尾随 /
。 in-directory
and path-only
等多个函数将使用此信息以不同方式处理通向文件和目录的路径。
不幸的是,推荐的创建路径的方法,build-path
没有任何好的创建目录路径的机制。我知道我可以将路径作为字符串并使用 string->path
,但这比直接使用 build-path
更脆弱:
> (string->path "a/b/")
#<path:a/b/>
我可以做的另一件事是结合 build-path
和 path-only
向路径添加一个额外的 'trash' 元素,然后将其删除。但这很笨重,因为我必须制作 'trash' 字符串。
> (path-only (build-path "a" "b" "trash"))
#<path:a/b/>
我'could'只是在build-path
函数中放了一个.
(或'same
),保证了它是一个目录路径,但是路径本身有一个 .
最后,甚至不能用 path-only
:
删除
> (build-path "a" "b" 'same)
#<path:a/b/.>
虽然所有这三个都可以将路径转换为目录路径,但有没有更简洁的方法将现有的 Racket 路径转换为目录路径?
您使用 build-path
的方法是正确的。您要查找的函数是 path->directory-path
。它需要一个路径对象,并将其转换为目录路径(在 unix 中,这意味着添加您提到的尾随 /
。
> (build-path "a" "b")
#<path:a/b>
> (path->directory-path (build-path "a" "b"))
#<path:a/b/>
Racket 的路径库对文件和目录的处理方式略有不同。在基于 Unix 的 Racket 发行版中,目录末尾有一个尾随 /
。 in-directory
and path-only
等多个函数将使用此信息以不同方式处理通向文件和目录的路径。
不幸的是,推荐的创建路径的方法,build-path
没有任何好的创建目录路径的机制。我知道我可以将路径作为字符串并使用 string->path
,但这比直接使用 build-path
更脆弱:
> (string->path "a/b/")
#<path:a/b/>
我可以做的另一件事是结合 build-path
和 path-only
向路径添加一个额外的 'trash' 元素,然后将其删除。但这很笨重,因为我必须制作 'trash' 字符串。
> (path-only (build-path "a" "b" "trash"))
#<path:a/b/>
我'could'只是在build-path
函数中放了一个.
(或'same
),保证了它是一个目录路径,但是路径本身有一个 .
最后,甚至不能用 path-only
:
> (build-path "a" "b" 'same)
#<path:a/b/.>
虽然所有这三个都可以将路径转换为目录路径,但有没有更简洁的方法将现有的 Racket 路径转换为目录路径?
您使用 build-path
的方法是正确的。您要查找的函数是 path->directory-path
。它需要一个路径对象,并将其转换为目录路径(在 unix 中,这意味着添加您提到的尾随 /
。
> (build-path "a" "b")
#<path:a/b>
> (path->directory-path (build-path "a" "b"))
#<path:a/b/>