Shell 确保路径是Racket中的目录路径

Shell 确保路径是Racket中的目录路径,shell,file,path,racket,filepath,Shell,File,Path,Racket,Filepath,Racket的路径库对文件和目录的处理略有不同。在基于Unix的Racket发行版中,目录末尾有一个尾随的/。一些函数(如和)将使用此信息以不同方式处理指向文件和目录的路径 不幸的是,推荐的创建路径的方法没有创建目录路径的良好机制。我知道我可以将路径设置为字符串并使用string->path,但这将比直接使用build path更脆弱: > (string->path "a/b/") #<path:a/b/> 我“可以”在构建路径函数中放置一个(或'same),这确保它

Racket的路径库对文件和目录的处理略有不同。在基于Unix的Racket发行版中,目录末尾有一个尾随的
/
。一些函数(如和)将使用此信息以不同方式处理指向文件和目录的路径

不幸的是,推荐的创建路径的方法没有创建目录路径的良好机制。我知道我可以将路径设置为字符串并使用
string->path
,但这将比直接使用
build path
更脆弱:

> (string->path "a/b/")
#<path:a/b/>
我“可以”在
构建路径
函数中放置一个
(或
'same
),这确保它是一个目录路径,但路径本身在末尾有一个
,甚至不能用
路径只删除它:

> (build-path "a" "b" 'same)
#<path:a/b/.>
>(构建路径“a”“b”相同)
#

虽然这三种方法都可以将路径转换为目录路径,但有没有更干净的方法将现有的球拍路径转换为目录路径?

使用
构建路径,您的思路是正确的。您正在寻找的功能是。它接受path对象,并将其转换为目录路径(在unix中,这意味着添加您提到的尾部
/

> (build-path "a" "b")
#<path:a/b>
> (path->directory-path (build-path "a" "b"))
#<path:a/b/>
>(生成路径“a”和“b”)
#
>(路径->目录路径(生成路径“a”“b”))
#
> (build-path "a" "b")
#<path:a/b>
> (path->directory-path (build-path "a" "b"))
#<path:a/b/>