Ocaml 在用户';s主目录
我在使用Ocaml 在用户';s主目录,ocaml,filenames,ocaml-core,Ocaml,Filenames,Ocaml Core,我在使用Core.In_channel库时遇到了一个奇怪的问题。下面是一段代码,用于打开用户主目录中的文件 open Core.Std In_channel.with_file "~/.todo_list" ~f:(fun in_c -> (* Do something here... *) ) 但是,运行此命令时,我得到的结果如下: Exception: (Sys_error "~/.todo_list: No such file or directory"). 我绝对肯定~/.
Core.In_channel
库时遇到了一个奇怪的问题。下面是一段代码,用于打开用户主目录中的文件
open Core.Std
In_channel.with_file "~/.todo_list" ~f:(fun in_c ->
(* Do something here... *)
)
但是,运行此命令时,我得到的结果如下:
Exception: (Sys_error "~/.todo_list: No such file or directory").
我绝对肯定~/.todo_list
存在,但我怀疑文件名被OCaml误解了
这里我遗漏了什么?正如其他人所说,
~
的扩展是由shell完成的,而不是由底层系统完成的。使用_file调用时不涉及shell,因此字符串按字面意思解释为文件名
如果代码代表已登录的用户运行,则主目录可用作环境变量home
的值
# Unix.getenv "HOME";;
- : string = "/Users/username"
否则,您将需要从用户数据库中提取主目录
# let open Unix in (getpwnam "username").pw_dir;;
- : string = "/Users/username"
~
是Unix shell的专用工具,shell将自动展开它们。检查您的ocaml模块,了解如何将~
扩展到完整的用户路径。是的,我就是这么想的。我现在正在调查这件事。