Comment puis-je effacer le contenu d’un fichier

Je voudrais savoir comment le contenu d’un fichier peut être effacé en C. Je sais que cela peut être fait en utilisant truncate , mais je ne trouve aucune source décrivant clairement comment.

Les autres réponses expliquent comment utiliser correctement la fonction truncate … mais si vous vous trouvez sur un système non POSIX sans unistd.h , le plus simple est d’ouvrir le fichier pour l’écrire et de le fermer immédiatement:

 #include  int main() { FILE *file = fopen("asdf.txt", "w"); if (!file) { perror("Could not open file"); } fclose(file); return 0; } 

Ouvrir un fichier avec "w" (pour le mode écriture) “vide” le fichier afin que vous puissiez le remplacer; sa fermeture immédiate entraîne alors un fichier de longueur 0.

L’appel truncate() dans UNIX est simplement:

 truncate("/some/path/file", 0); 

Alors que vous pouvez simplement ouvrir et fermer le fichier, l’appel truncate est conçu spécifiquement pour ce cas d’utilisation:

 #include  //for truncate #include  //for perror int main() { if (truncate("/home/fmark/file.txt", 0) == -1){ perror("Could not truncate") } return 0; } 

Si le fichier est déjà ouvert, vous pouvez utiliser cette poignée avec ftruncate :

 #include  //for fopen, perror #include  //for ftruncate int main() { FILE *file = fopen("asdf.txt", "r+"); if (file == NULL) { perror("could not open file"); } //do something with the contents of file if (ftruncate(file, 0) == -1){ perror("Could not truncate") } fclose(file); return 0; } 

tronquer (2) n’est pas un appel portable. Il se conforme uniquement à 4.2BSD. Bien que cela se trouve sur la plupart des systèmes de type * nix, je dirais qu’il faudrait utiliser des routines conformes à POSIX.1 qui sont pratiquement garanties sur la plupart des environnements modernes (y compris Windows).

Voici donc un extrait de code compatible POSIX.1-2000:

 int truncate_file(const char *name) { int fd; fd = open (name, O_TRUNC|O_WRONLY); if ( fd >= 0 ) close(fd); /* open can return 0 as a valid descriptor */ return fd; } 

Pour supprimer le contenu d’un fichier, il existe évidemment une méthode de base pour ouvrir un fichier en mode écriture “w”, puis fermez-le sans y apporter de modifications.

 FILE *fp = fopen (file_path, "w"); fclose(fp); 

Cela supprimera toutes les données du fichier, car lorsque vous ouvrez un fichier existant en utilisant le mode “w”, le fichier est supprimé et un nouveau fichier portant le même nom est ouvert pour l’écriture, cela entraînera la suppression du contenu de votre fichier.

MAIS il y a un appel système tronqué dans les systèmes UNIX, qui est spécialement conçu pour le même but et qui est assez facile à utiliser:

 truncate (filepath, 0); 

si vous avez déjà ouvert votre fichier, fermez votre fichier avant de le tronquer ou de l’utiliser

 ftruncate (file_path, 0);