【发布时间】:2016-02-05 09:40:14
【问题描述】:
在OCaml中,如何获得一个canonical file path,相当于Java的File.getCanonicalPath()(也就是规范化的绝对路径)?
模块Filename 有一个dirname 函数,但它不会将诸如/etc/../usr 之类的文件路径规范化为/usr。
【问题讨论】:
在OCaml中,如何获得一个canonical file path,相当于Java的File.getCanonicalPath()(也就是规范化的绝对路径)?
模块Filename 有一个dirname 函数,但它不会将诸如/etc/../usr 之类的文件路径规范化为/usr。
【问题讨论】:
JaneStreet Ocaml Core 拥有Filename.realpath。
另外,谷歌搜索 ocaml realpath(参见 C 语言中的 realpath(3);您可以为它编写一些包装器)
【讨论】:
realpath不够通用。
我们的phat 库相当精确地定义了normalized。该库对于大多数用例来说都是多余的,但我们为大量处理文件系统的应用程序编写了它。我们很快就会发布到 opam,但现在你必须做几个图钉。这是一个完整的工作示例:
$ opam pin add solvuu_build https://github.com/solvuu/solvuu_build
$ opam pin add phat https://github.com/solvuu/phat.git
$ utop
# #require "phat.pure";;
# module Phat = Phat_pure.Std;;
# Phat.(abs_dir "/a/../b/./c/d/" |> ok_exn |> normalize |> to_string);;
- : string = "/b/c/d"
【讨论】: