J’utilise C pour écrire des données dans un fichier. Je veux effacer le texte précédent écrit dans le fichier au cas où il serait plus long que ce que j’écris maintenant. Je veux diminuer la taille du fichier ou le tronquer jusqu’à la fin. Comment puis-je faire ceci?
Si vous souhaitez conserver le contenu précédent du fichier jusqu’à une certaine longueur (une longueur supérieure à zéro, fournie par d’autres réponses), POSIX fournit les fonctions truncate()
et ftruncate()
pour le travail.
#include int ftruncate(int fildes, off_t length); int truncate(const char *path, off_t length);
Le nom indique le but principal – raccourcir un fichier. Mais si la longueur spécifiée est plus longue que la longueur précédente, le fichier augmente (zéro remplissage) à la nouvelle taille. Notez que ftruncate()
fonctionne sur un descripteur de fichier, pas sur un FILE *
; vous pourriez utiliser:
if (ftruncate(fileno(fp), new_length) != 0) ...error handling...
Cependant, vous devez savoir que le mixage des stream de fichiers ( FILE *
) et des descripteurs de fichiers ( int
) dans un seul fichier est susceptible de créer de la confusion – voir les commentaires sur certains problèmes. Cela devrait être un dernier recours.
Il est cependant probable que pour vos besoins, tronquer à l’aide est tout ce dont vous avez besoin, et pour cela, les options offertes par d’autres seront suffisantes.
Pour Windows, il existe une fonction SetEndOfFile()
et une fonction associée, la fonction SetFileValidData()
, qui peuvent effectuer un travail similaire, mais en utilisant une interface différente. Fondamentalement, vous cherchez où vous souhaitez définir la fin du fichier et ensuite appeler la fonction.
Il y a aussi une fonction _chsize()
comme documenté dans la réponse de sofr .
Dans les systèmes Windows, il n’ya pas d’en-tête
mais vous pouvez toutefois tronquer un fichier en utilisant
_chsize( fileno(f), size);
C’est une fonction de votre système d’exploitation. La manière standard de POSIX est de:
open("file", O_TRUNC | O_WRONLY);
Si cela doit s’exécuter sous UNIX, ces API doivent être disponibles:
#include #include int truncate(const char *path, off_t length); int ftruncate(int fd, off_t length);
Selon le “man truncate” sur ma machine Linux, ceux-ci sont conformes à POSIX. Notez que ces appels augmenteront réellement la taille du fichier (!) Si vous passez une longueur supérieure à la longueur actuelle.
Si vous souhaitez tronquer la totalité du fichier, ouvrez le fichier en écriture pour vous. Sinon, vous devez ouvrir le fichier pour le lire et lire les parties du fichier que vous souhaitez conserver dans une variable temporaire, puis les envoyer là où vous en avez besoin.
Tronquer le fichier entier:
FILE *file = fopen("filename.txt", "w"); //automatically clears the entire file for you.
Tronquer une partie du fichier:
FILE *inFile("filename.txt", "r"); //read in the data you want to keep fclose(inFile); FILE *outFile("filename.txt", "w"); //output back the data you want to keep into the file, or what you want to output.
Ah, vous avez édité votre message, vous utilisez C. Lorsque vous ouvrez le fichier, ouvrez-le avec le mode “w +” comme ça, et il le tronquera pour l’écriture:
FILE* f = fopen("C:\\gabehabe.txt", "w+"); fclose(file);
edit>
Pour tronquer un fichier en C ++, vous pouvez simplement créer un object en aval dans le fichier, en utilisant ios_base :: trunc comme mode de fichier pour le tronquer, comme ceci:
ofstream x("C:\\gabehabe.txt", ios_base::trunc);