在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);你可能會爲它編寫一些包裝)
我們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 "https://stackoverflow.com/a/../b/./c/d/" |> ok_exn |> normalize |> to_string);;
- : string = "/b/c/d"