首页 > 解决方案 > 为 file:get_cwd() 获取 {error, enoent} 的常见原因是什么?

问题描述

我正在使用file:get_cwd()并且我看到它的错误,即{error, enoent}. 导致此错误的潜在问题可能是什么?

标签: erlang

解决方案


如果您查看用于在此类系统上实现的UNIX 手册页getcwd(3),您会发现对错误结果file:get_cwd/0的以下解释:ENOENT

ENOENT 当前工作目录已取消链接。

换句话说,如果当前工作目录已从 Erlang 进程下删除,则会发生此错误。该模块的文档enoent中存在许多类似的解释。file

erl假设/tmp/foo您的系统上尚不存在该目录,请尝试从 shell 执行以下调用序列:

1> file:make_dir("/tmp/foo").
ok
2> cd("/tmp/foo").
/tmp/foo
ok
3> file:get_cwd().
{ok,"/tmp/foo"}
4> file:del_dir("/tmp/foo").
ok
5> file:get_cwd().
{error,enoent}

此序列首先创建新目录/tmp/foo并将erl进程的工作目录更改为该目录。正如预期的那样,第一次调用file:get_cwd()验证/tmp/foo是工作目录。然后通过调用删除目录file:del_dir/1。因为工作目录现在不再存在,所以第二次调用file:get_cwd()返回{error,enoent}.


推荐阅读