Projet

Général

Profil

Création fichier/dossier temporaire unique

Étape 1 - Récupérer un nom unique pour le fichier temporaire que l'on veut créer

La classe QTemporaryFile est utilisée pour créer des fichiers provisoires uniques sans risque.
Le fichier lui-même est créé en appelant la méthode open().
L'utilisation de cet objet vous garantit un nom de fichier provisoire unique, c'est-à-dire que sa création n'écrasera pas un fichier existant.
Ce fichier sera par la suite supprimé par la destruction de l'objet QTemporyFile.
Ceci évite la corruption de données dans des applications qui les stockent dans des fichiers provisoires.
Le nom de fichier est soit auto-produit (sous la forme de "qt-XXXXXX", où les "X" sont remplacés par des chiffres et des lettres aléatoires, soit créé sur la base d'un modèle que l'on passe au constructeur du QTemporyFile (je vous renvoie vers la documentation officielle pour de plus amples informations).
Pour récupérer le nom unique de ce fichier, un simple appel à la méthode fileName() suffit.
Mais, cette classe ne sert qu'à créer des fichiers temporaires (en attendant Qt5 :p ).
Pour concevoir des fichiers temporaires uniques, il suffit de passer au paramètre du constructeur de la méthode mkpath() le nom unique que l'on vient de récupérer (la méthode fileName() décrite plus haut).
Le seul problème, c'est que tant que notre objet QTemporyFile existe, le nom renvoyé par la méthode fileName() est bloqué par ce fichier (on peut utiliser ce fichier mais on ne peut créer un dossier avec ce même nom).
Donc, voici une petite méthode qui nous renverra juste le nom unique que l'on cherche et qui de plus nous supprimera le fichier temporaire créé (rappelez-vous, la destruction de l'objet QTemporyFile effacera ce fichier).

QString MaClasse::uniqueIDTemporaire()
{
    QTemporaryFile file;                 // Déclaration de l'objet  
    QString strArenvoyer ="";            // Déclaration de la chaine de caractères qui nous renverra le nom unique attendu (initialisé à "")
    if (file.open()) {                   // Petite condition de garde et application de la méthode open() qui nous crée notre fichier temporaire en toute sécurité
        strArenvoyer = file.fileName();  // La fameuse méthode fileName() qui nous renvoie le nom unique tant attendu
        file.close();                    // Appel de la méthode close() qui détruit le fichier (oui même si la sortie de la méthode le détruit aussi, on n'est jamais trop prudent)
    }
    return strArenvoyer;                 // Renvoi de la chaine
}

À partir de là, on peut passer à l'étape suivante...

Étape 2 - Création d'un dossier temporaire unique

Je vous envoie du code brut que je commente. Allons y !

    QDir fichierTempDestination;                                        // Déclaration d'un objet QDir (pour gérer des fichiers ou des dossiers... cf la doc :p )
    QString monNomDeFichierUniqueQuiDechire="";                         // Je pouvais aller plus loin dans les superlatifs mais bon... 

    monNomDeFichierUniqueQuiDechire = uniqueIDTemporaire();             // Affectation du nom unique que je recherche (cf étape 1)

    if(monNomDeFichierUniqueQuiDechire.isEmpty())                       // Prudence... notre chaine de caractères peut être vide (on ne fait pas de contrôle dans la méthode uniqueIDTemporaire())
    {
      // faire ce que vous voulez, mais pas de création
      // de fichier temporaire :(
    }
    if(fichierTempDestination.mkpath(monNomDeFichierUniqueQuiDechire))  // tentative de création du fichier temporaire avec un nom unique
    {
        // Youpi, on a notre fichier !!
    }
    else 
    {
        // La création a échoué  
    }

Voila, ces différentes méthodes sont présentes dans l'éditeur du logiciel Mulot si vous avez besoin de voir une application concrète de ces deux étapes.
N'hésitez pas à commenter si vous trouvez de meilleures solutions.

Bon code =)

Redmine Appliance - Powered by TurnKey Linux