2015-02-01 2 views
0

У меня есть функция, которая пытается читать из открытого IoDevice. В случае {ошибки, причины} Я хочу распечатать имя файла.Получение имени файла из IoDevice в Erlang

Как я могу это сделать?

код Источник:

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. 

ответ

4

IoDevice может быть либо идентификатор процесса или дескриптор файла. Если это идентификатор процесса, вы можете использовать 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 не будет работать, и я не знаю способа, чтобы получить имя файла в этом случае.

Смежные вопросы