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++?
Odpowiedz
mkdtemp(char *template)
http://www.cl.cam.ac.uk/cgi-bin/manpage?3+mkdtemp
Tworzy katalog tymczasowy.
Podążyłem za twoim linkiem do dokumentacji. Opisuje tylko sposób tworzenia pliku tymczasowego. Pytano o to, jak utworzyć katalog tymczasowy. –
@ ErikSjölund masz rację, połączyłem złe polecenie. –
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().
Biblioteka systemu plików Boost zapewnia funkcje katalogowe niezależne od platformy. Zwiększy to nieco rozmiar programu, ale używanie Boost jest często lepsze (i często łatwiejsze) niż toczenie własne.
http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm
Nie chcę wprowadzać zależności tylko dla zwiększenia że. – Gatis
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);
Standardowy C++ nie ma funkcji manipulacji katalogami. –
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. –
Co powiesz na getenv() przekazujący "TMP"? – Gatis