Meinst du nur den tatsächlichen Dateinamen erzeugen? In diesem Fall wäre der sicherste Weg, eine Mischung aus den Zahlen zu verwenden, die Sie ab sofort erhalten () und dem Hostnamen Ihres Computers (wenn Sie mehrere Knoten haben, die dasselbe tun).
Etwas wie:
%Vor% Sie können auch TMP = lib:nonl(os:cmd("mktemp")).
Oder Sie könnten
tun erlang:phash2(make_ref())
für einen schnellen und einfachen eindeutigen Identifizierer. Einzigartig für bis zu 2 ^ 82 Anrufe, die ausreichen sollten.für Ihre Zwecke. Ich finde das einfacher als einen Zeitstempel mit Knotennamen für die Verwendung zu formatieren.
Ich hatte dieses Problem endlich - und mein Benutzer benutzt eine Mischung aus Windows- und Linux-Systemen, also wird die altbewährte Methode lib:nonl(os:cmd("mktemp"))
sie nicht mehr schneiden.
Also hier ist, wie ich es angegangen bin, sowohl mit einer Funktion mktemp/1
, die einen Dateinamen zurückgibt, die verwendet werden kann, als auch einer mktemp_dir/1
Funktion, die ein Verzeichnis zurückgibt (nachdem es erstellt wurde).
Und die Verzeichnisversion:
%Vor%Beides funktioniert grundsätzlich genauso: Wir erhalten einen stark zufälligen Namen als Binärdatei, wandeln diesen in eine base36-Zeichenkette um und hängen sie an das an, was das Betriebssystem uns als sicheren lokalen temporären Cache-Speicherort zurückgibt.
Auf einem Unix-System könnten wir natürlich filename:join(["/tmp", Prefix, Rand])
verwenden, aber die Nichtverfügbarkeit von /tmp
unter Windows ist hier eine Frage.