Comment créer un fichier texte temporaire en C++?

j'essaie de créer un fichier texte temporaire en C++ et de le supprimer à la fin de le programme. Je n'ai pas eu beaucoup de chance avec Google.

pouvez-vous me dire quelles fonctions utiliser?


les réponses ci-dessous m'indiquent comment créer un fichier temporaire. Et si je voulais juste créer un fichier (tmp.txt) et ensuite l'effacer? Comment dois-je procéder?

21
demandé sur Bill the Lizard 2009-06-21 00:34:31

7 réponses

Peut-être que cela aidera

FILE * tmpfile ( void );

http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/

Ouvrir un fichier temporaire

Voir aussi

char * tmpnam ( char * str );

générer un nom de fichier temporaire

une chaîne contenant un nom de fichier différent de n'importe quel fichier existant est générer. Cette chaîne peut être utilisée pour créer un fichier temporaire sans remplacer tout autre fichier existant.

http://www.cplusplus.com/reference/clibrary/cstdio/tmpnam/

22
répondu Tom 2009-06-20 20:39:53

Voici un exemple complet:

#include <unistd.h>

int main(void) {
  char filename[] = "/tmp/mytemp.XXXXXX"; // template for our file.        
  int fd = mkstemp(filename);    // Creates and opens a new temp file r/w.
                                 // Xs are replaced with a unique number.
  if (fd == -1) return 1;        // Check we managed to open the file.
  write(fd, "abc", 4);           // note 4 bytes total: abc terminating ''
  /* ...
     do whatever else you want.
     ... */
  close(fd);
  unlink(filename);              // Delete the temporary file.
}

si vous connaissez le nom du fichier que vous voulez créer (et êtes sûr qu'il n'existe pas déjà) alors vous pouvez évidemment utiliser open pour ouvrir le fichier.

tmpnam et tmpfile devraient probablement être évités car ils peuvent souffrir de conditions de course-voir man tmpfile(3) pour les détails.

18
répondu DaveR 2013-09-21 05:45:50

ceci peut être un peu hors sujet parce que l'auteur voulait créer un tmp.txt et supprimez - le après l'avoir utilisé, mais c'est trivial-vous pouvez simplement l'ouvrir() et le supprimer (en utilisant boost::filesystem bien sûr).

mkstemp () est basé sur UNIX. Avec Windows, vous utilisez GetTempFileName() et GetTempPath() pour générer un chemin vers un fichier temp. Exemple de code MSDN:

http://msdn.microsoft.com/en-us/library/aa363875%28VS.85%29.aspx

5
répondu Vector Maniac 2010-03-04 08:22:09

sous Linux (à partir du noyau 3.11), il y a un drapeau à ouvrir(2) O_TMPFILE qui crée un fichier temporaire qui n'a pas de nom (c'est-à-dire qu'il n'apparaît pas dans le système de fichiers). Cela a quelques caractéristiques intéressantes:

  • pas de soucis sur les noms uniques, c'est juste un inode, il n'y a pas de nom.
  • pas de conditions de course lors de la création (par ex. attaques symlink).
  • pas de fichiers errants si votre application tombe en panne, elle est toujours automatiquement supprimée.
3
répondu TheAmigo 2014-10-06 20:35:32

si vous avez besoin d'un fichier nommé (par exemple, pour passer le nom à un autre processus, peut-être un compilateur ou un éditeur), alors enregistrez une fonction de nettoyage qui supprime le fichier avec atexit(). Vous pouvez utiliser soit C++ <iostream> ou C