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?
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.
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.
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
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.