打开用户主目录中的文件
Opening a file in the user's home 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 完成的,而不是由底层系统完成的。您对 with_file
的调用不涉及 shell,因此字符串按字面解释为文件名。
如果代码 运行 代表已登录的用户,则主目录可用作环境变量 HOME
的值。
# Unix.getenv "HOME";;
- : string = "/Users/username"
否则您将需要从用户数据库中提取主目录。
# let open Unix in (getpwnam "username").pw_dir;;
- : string = "/Users/username"
我 运行 在使用 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 完成的,而不是由底层系统完成的。您对 with_file
的调用不涉及 shell,因此字符串按字面解释为文件名。
如果代码 运行 代表已登录的用户,则主目录可用作环境变量 HOME
的值。
# Unix.getenv "HOME";;
- : string = "/Users/username"
否则您将需要从用户数据库中提取主目录。
# let open Unix in (getpwnam "username").pw_dir;;
- : string = "/Users/username"