2010-07-31 14 views
6

Ich schreibe eine Funktion in C++, die ein temporäres Verzeichnis erstellt. Eine solche Funktion sollte so portabel wie möglich sein, z. Es sollte unter Linux, Mac und Win32-Umgebungen funktionieren. Wie erreiche ich das?Wie erstellt man ein temporäres Verzeichnis in C++?

+0

Standard C++ hat keine Verzeichnismanipulationsfunktionen. –

+3

Der POSIX-Standard hat eine Definition. Alle modernen Betriebssysteme verfügen über eine POSIX-Compliance-Schicht (einschließlich Windows). Also ist die mktemp() Familie der Funktionen, nach denen Sie suchen. Aber seien Sie vorsichtig, es ist eine Sicherheitslücke, ein temporäres Verzeichnis zu erstellen und dann Dateien darin zu platzieren. Es ist sicherer, Dateideskriptoren direkt zu erstellen. –

+0

Was ist mit getenv() passiert "TMP"? – Gatis

Antwort

0

mkdtemp(char *template)

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

Erstellt ein temporäres Verzeichnis.

+0

Ich folgte Ihrem Dokumentationslink. Es beschreibt nur, wie eine temporäre Datei erstellt wird. Es wurde gefragt, wie ein temporäres Verzeichnis erstellt werden soll. –

+1

@ ErikSjölund Sie sind richtig, ich habe den falschen Befehl verknüpft. –

4

Überprüfen Sie die mkdtemp Funktion here.

+0

Unter Windows gibt es das nicht, soweit ich weiß. :( –

+0

Ich denke, Sie sind Schriftsteller ... Löschen ... –

+1

gibt es keine plattformunabhängige Möglichkeit, es in Standard c/C++ zu tun, verwenden Sie GetTempPath und GetTempFileName unter Windows – Kane

0

Es gibt keine Standardfunktion, daher müssen Sie für jede Plattform, die Sie als Ziel haben, verschiedene Implementierungen kompilieren.

Unter Windows beispielsweise sollten Sie das temp-Verzeichnis verwenden, das durch einen Aufruf von GetTempPath() abgerufen werden kann.

13

Version 3 von Boost-Filesystem-Bibliothek bietet Funktion unique_path() für einen Pfadnamen geeignet zum Erzeugen einer temporären Datei oder ein Verzeichnis zu erstellen.

using namespace boost::filesystem; 

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