2012-08-17 16 views
9

Widziałem kilka postów związanych z moim pytaniem, ale żaden nie dotyczył tego całkowicie. Potrzebuję utworzyć plik w standardowym katalogu tymczasowym i po zakończeniu pisania go, przenieś go do innej lokalizacji. Chodzi o to, że plik jest uważany za tymczasowy podczas pobierania i trwały po zakończeniu pobierania.Jak uzyskać tymczasową nazwę pliku?

Próbuję tego, dzwoniąc pod numer mkstemp lub tmpfile, a następnie rename po zakończeniu pisania. Potrzebuję jednak pełnej ścieżki pliku, aby wywołać zmianę nazwy i najwyraźniej pobranie nazwy pliku z deskryptora pliku (zwróconego przez mkstemp) lub FILE * (zwróconego przez tmpfile) nie jest trywialnym procesem. Można to zrobić, ale nie jest elegancko.

Czy jest wywołanie systemowe, które utworzy plik tymczasowy i poda mi nazwę? Wiem o mktemp i związanych z nim połączeniach, ale nie gwarantują one, że będą unikatowe lub przestarzałe. A może jest lepszy sposób na tworzenie, pisanie i przenoszenie plików tymczasowych.

Odpowiedz

10

Wygląda na to, że mkstemp jest właściwie drogą.

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

Po tej rozmowy jest posiadanie ważnej deskryptor w fd i nazwę pliku skojarzonego w name.

+0

Masz rację, i muszę być bardziej dokładny, kiedy czytam dokumentację. Zadzwoń do mnie OCD, ale użyłem informacji na [ten post] (http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu), aby uzyskać folder tymczasowy zamiast zwykłego kodowania "/ tmp"; – jorgander

+0

Jeśli tworzysz plik w/tmp /, a następnie planujesz przenieść plik do określonej lokalizacji powiedz "/ home//to zajmie dużo czasu, aby cp lub przenieść i będzie jeszcze gorsze, jeśli/tmp i/home/znajdowały się w innym obszarze partycji, więc lepiej utwórz plik w/home//fileXXXXX i zmień jego nazwę na/home//file: – Viswesn

+0

Jaka jest nazwa pliku końcowego? –

Powiązane problemy