2010-07-31 5 views
6

J'écris une fonction en C++ qui crée un répertoire temporaire. Une telle fonction devrait être aussi portable que possible, par ex. il devrait fonctionner sous linux, mac et win32. Comment puis-je y parvenir?Comment créer un répertoire temporaire en C++?

+0

standard C++ n'a pas de fonctions de manipulation de répertoire. –

+3

La norme POSIX a une définition. Tous les systèmes d'exploitation modernes ont une couche de conformité POSIX (y compris Windows). La famille de fonctions mktemp() est donc ce que vous cherchez. Mais attention, c'est une faille de sécurité pour créer un répertoire temporaire puis y placer des fichiers. Il est plus sûr de créer des descripteurs de fichiers directement. –

+0

Qu'en est-il de getenv() passant "TMP"? – Gatis

Répondre

0

mkdtemp(char *template)

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

crée un répertoire temporaire.

+0

J'ai suivi votre lien vers la documentation. Il décrit seulement comment créer un fichier temporaire. Ce qui a été demandé est comment créer un répertoire temporaire. –

+1

@ ErikSjölund vous avez raison, j'ai lié la mauvaise commande. –

4

Vérifiez la mkdtemp fonction here.

+0

Cela n'existe pas sur Windows, autant que je sache. :( –

+0

Je suppose que vous êtes écrivain ... suppression ... –

+1

il n'y a pas de manière indépendante de la plate-forme pour le faire en standard c/C++, utilisez GetTempPath et GetTempFileName sur Windows – Kane

0

Il n'existe aucune fonction standard pour cela, vous devrez donc compiler différentes implémentations pour chaque plate-forme que vous ciblez. Sur Windows, par exemple, vous devez utiliser le répertoire temp, qui peut être obtenu par un appel à GetTempPath().

1

La bibliothèque Boost du système de fichiers fournit des fonctions de répertoire indépendantes de la plate-forme. Cela augmentera un peu la taille de votre programme, mais l'utilisation de Boost est souvent meilleure (et souvent plus facile) que de lancer la vôtre.

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm

+0

Je ne veux pas introduire de dépendance sur boost juste pour cette. – Gatis

13

version 3 de la bibliothèque Boost fournit des systèmes de fichiers fonction unique_path() pour générer un nom de chemin approprié pour la création d'un fichier ou un répertoire temporaire.

using namespace boost::filesystem; 

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