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模块,了解如何将
~
扩展到完整的用户路径。是的,我就是这么想的。我现在正在调查这件事。