在Erlang中从IoDevice获取文件名

时间:2015-02-01 15:54:59

标签: erlang

我有一个试图从开放的IoDevice读取的函数。 在{error,Reason}的情况下,我想打印出文件名。

我该怎么做?

源代码:

read_file(IoDevice) ->
    case read_file(IoDevice, []) of
        {ok, OpCodes} ->
            OpCodes;
        {error, Reason} ->
            io:format("Unable to read file ~s: ~s ~n", [File, Reason]),
            []
    end.

1 个答案:

答案 0 :(得分:4)

IoDevice可以是进程ID或文件描述符。如果它是进程ID,您可以使用file:pid2name/1获取文件名:

1> {ok,IoDevice} = file:open("/tmp/x.erl", [read]).
{ok,<0.43.0>}
2> {ok, Filename} = file:pid2name(IoDevice).
{ok,"/tmp/x.erl"}

如果IoDevice是文件描述符,pid2name将不起作用,我不知道在这种情况下获取文件名的方法。