2010-07-31 14 views
6

Sto scrivendo una funzione in C++ che crea una directory temporanea. Tale funzione dovrebbe essere il più portabile possibile, ad es. dovrebbe funzionare con gli ambienti linux, mac e win32. Come lo realizzo?Come creare una directory temporanea in C++?

+0

Standard C++ non ha funzioni di manipolazione della directory. –

+3

Lo standard POSIX ha una definizione. Tutti i sistemi operativi moderni hanno un livello di conformità POSIX (incluse le finestre). Quindi la famiglia di funzioni mktemp() è ciò che stai cercando. Ma fai attenzione che sia una vulnerabilità di sicurezza creare una directory temporanea e inserire i file al suo interno. È più sicuro creare direttamente i descrittori di file. –

+0

Cosa succede a getenv() passando "TMP"? – Gatis

risposta

0

mkdtemp(char *template)

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

Crea una directory temporanea.

+0

Ho seguito il tuo link alla documentazione. Descrive solo come creare un file temporaneo. Quello che è stato chiesto è come creare una directory temporanea. –

+1

@ ErikSjölund sei corretto, ho collegato il comando sbagliato. –

4

Verificare la funzione mkdtemphere.

+0

Questo non esiste su Windows, per quanto ne so. :( –

+0

Immagino che tu sia scrittore ... cancellazione ... –

+1

non esiste un modo indipendente dalla piattaforma per farlo in c/C++ standard, utilizzare GetTempPath e GetTempFileName su Windows – Kane

0

Non esiste una funzione standard per eseguire questa operazione, quindi è necessario compilare diverse implementazioni per ciascuna piattaforma target.

In Windows, ad esempio, è necessario utilizzare la directory temp, che può essere ottenuta da una chiamata a GetTempPath().

13

versione 3 di Boost Filesystem Biblioteca fornisce la funzione unique_path() per generare un percorso adatto per la creazione di un file temporaneo o directory.

using namespace boost::filesystem; 

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