in tempfile.rb
Graben werden Sie feststellen, dass Tempfile
Dir::Tmpname
enthalten. Im Inneren finden Sie make_tmpname
, die das tut, was Sie verlangen.
Dir::Tmpname.make_tmpname "/tmp/źdźbło", nil
# => "/tmp/źdźbło20121209-1867-1qyptqe"
Dir::Tmpname.make_tmpname(['a', '.png'], nil)
# => "a20121209-2710-wcjbzr.png"
In der gleichen Datei gibt es auch Dir::Tmpname.create
, die, je nachdem, was Sie erreichen wollen, tut ein wenig mehr als make_tmpname
. Insbesondere ermittelt es, welches temporäre Verzeichnis zu verwenden ist (vorausgesetzt, Sie sind nicht auf * nix, wobei /tmp
eine global korrekte Annahme ist). Trotzdem, ein wenig hässlich gegeben zu verwenden, dass sie einen Block erwartet:
Dir::Tmpname.create(['a', '.png']) { }
# => "/tmp/a20140224-15930-l9sc6n.png"
Der Block ist für Code, wenn die Datei so ein Errno::EEXIST
und erhöhen besteht zu testen, ob ein neuer Name Wert markiert erzeugt werden kann, auf mit Inkrementieren das Ende.
Danke, das ist es. Kann auch mit einem Array-Argument verwendet werden, um die Dateinamenerweiterung beizubehalten: 'Dir :: Tmpname.make_tmpname (['a', '.png'], nil)' – iltempo
@iltempo, gern geschehen. Ich habe dein Beispiel der Antwort hinzugefügt. – Jan
Das ist großartig, aber niemand hat erwähnt, dass Sie 'tmpdir'requirieren müssen, damit dies funktioniert. – KingBob