2012-08-17 11 views
9

Ich habe einige Posts zu meiner Frage gesehen, aber keine, die sich vollständig damit befassen. Ich muss eine Datei im standardmäßigen temporären Verzeichnis erstellen und nachdem ich fertig damit bin, es an einen anderen Ort zu verschieben. Die Idee ist, dass die Datei als temporär betrachtet wird, während sie heruntergeladen wird und dauerhaft ist, nachdem der Download abgeschlossen ist.Wie bekomme ich einen temporären Dateinamen?

Ich versuche dies, indem ich entweder mkstemp oder tmpfile, dann rename, nachdem ich fertig bin zu schreiben. Ich benötige jedoch den vollständigen Pfad der Datei, um den Umbenennungsnamen aufzurufen, und scheinbar den Dateinamen aus einem Dateideskriptor (von mkstemp zurückgegeben) oder FILE * (von tmpfile zurückgegeben) zu erhalten, ist kein trivialer Prozess. Es kann gemacht werden, aber es ist nicht elegant.

Gibt es einen Systemaufruf, der eine temporäre Datei erstellt und mir den Namen gibt? Ich weiß über mktemp und verwandte Anrufe, aber sie sind entweder nicht garantiert eindeutig oder veraltet. Oder vielleicht gibt es einen besseren Weg, temporäre Dateien zu erstellen, zu schreiben und zu verschieben.

Antwort

10

Es sieht aus wie mkstemp ist eigentlich der Weg zu gehen.

int fd; 
char name[] = "/tmp/fileXXXXXX"; 
fd = mkstemp(name); 
/* Check fd. */ 

Nach diesem Aufruf haben Sie einen gültigen Deskriptor in fd und den Namen der zugehörigen Datei in name.

+0

Sie haben Recht, und ich muss gründlicher sein, wenn ich die Dokumentation lese. Rufen Sie mich OCD, aber ich habe die Info bei [diesem Beitrag] (http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu) verwendet, um die temporärer Ordner anstatt einfach "/ tmp" hart zu codieren; – jorgander

+0

Wenn Sie eine Datei in/tmp/erstellen und dann planen, die Datei an einen bestimmten Ort zu verschieben, sagen Sie "/ home//dann wird es lange dauern, um cp oder move und es ist am schlimmsten wenn/tmp und/home/waren in einem anderen Partitionsbereich, also erstellen Sie besser die Datei in/home//fileXXXXX und benennen sie in/home//Datei um. – Viswesn

+0

Wie lautet der endgültige Dateiname? –

Verwandte Themen