2010-07-31 20 views
6

Piszę funkcję w C++, która tworzy tymczasowy katalog. Taka funkcja powinna być jak najbardziej przenośna, jak to możliwe, np. powinien działać w środowiskach linux, mac i win32. Jak to osiągnąć?Jak utworzyć tymczasowy katalog w C++?

+0

Standardowy C++ nie ma funkcji manipulacji katalogami. –

+3

Standard POSIX ma definicję. Wszystkie nowoczesne systemy operacyjne mają warstwę zgodną z POSIX (w tym Windows). Tak więc rodzina funkcji mktemp() jest tym, czego szukasz. Należy jednak uważać, że jest to luka w zabezpieczeniach polegająca na utworzeniu katalogu tymczasowego, a następnie umieszczeniu w nim plików. Bezpieczniej jest tworzyć bezpośrednio deskryptory plików. –

+0

Co powiesz na getenv() przekazujący "TMP"? – Gatis

Odpowiedz

0

mkdtemp(char *template)

http://www.cl.cam.ac.uk/cgi-bin/manpage?3+mkdtemp

Tworzy katalog tymczasowy.

+0

Podążyłem za twoim linkiem do dokumentacji. Opisuje tylko sposób tworzenia pliku tymczasowego. Pytano o to, jak utworzyć katalog tymczasowy. –

+1

@ ErikSjölund masz rację, połączyłem złe polecenie. –

4

Sprawdź funkcję mkdtemphere.

+0

To nie istnieje w systemie Windows, o ile wiem. :( –

+0

Domyślam się, że jesteś pisarzem ... usuwając ... –

+1

nie ma niezależnego od platformy sposobu, aby to zrobić w standardowym c/C++, użyj GetTempPath i GetTempFileName w systemie Windows – Kane

0

Nie ma standardowej funkcji, aby to zrobić, więc musisz skompilować różne implementacje dla każdej platformy, na którą celujesz.

Na przykład w systemie Windows należy użyć katalogu temp, który można uzyskać, wywołując metodę GetTempPath().

13

Wersja 3 boost Filesystem Biblioteka udostępnia funkcję unique_path() generowania ścieżkę odpowiednią dla utworzenia tymczasowego pliku lub katalogu.

using namespace boost::filesystem; 

path ph = unique_path(); 
create_directories(ph);