如何在Erlang中创建临时文件名?

Fu.*_*Fu. 9 erlang filenames

我需要将数据放在一个文件中,因为我的其他函数将文件作为输入.

如何在Erlang中创建唯一的文件名?

是否存在类似unix"tempfile"的东西?

Maz*_*ake 12

你的意思是只生成真正的文件名?在这种情况下,最安全的方法是使用从现在开始的数字()和计算机主机名的混合(如果你有几个节点做同样的事情).

就像是:

1> {A,B,C}=now().
{1249,304278,322000}
2> N=node().
nonode@nohost
3> lists:flatten(io_lib:format("~p-~p.~p.~p",[N,A,B,C])).
"nonode@nohost-1249.304278.322000"
4> 
Run Code Online (Sandbox Code Playgroud)

  • 因为不是每个人都知道这一点:对erlang:now()的调用保证每次都返回唯一的结果.相当有用的财产...... (4认同)
  • `erlang:now/0`已被弃用,请使用`erlang:unique_integer/0`([docs](http://www.erlang.org/doc/man/erlang.html#unique_integer-1)). (3认同)

Hyn*_*dil 9

你也可以使用 TMP = lib:nonl(os:cmd("mktemp")).

  • 稍微丑陋,但`string:strip(os:cmd("mktemp"),right,$ \n)`可以避免通常在最后返回的恼人的隐形换行符. (2认同)

Jer*_*all 7

或者你可以做到

erlang:phash2(make_ref())

一个快速简便的独特标识符.最多2 ^ 82个电话的独特之处,应该足够用于您的目的.我发现这比使用节点名格式化时间戳更容易.