Est-il possible de supprimer les 10 derniers caractères d'un fichier texte?Supprimer les 10 derniers caractères d'un fichier texte
Merci
Est-il possible de supprimer les 10 derniers caractères d'un fichier texte?Supprimer les 10 derniers caractères d'un fichier texte
Merci
Pour le codage d'un octet sur la plate-forme POSIX, vous pouvez utiliser quelque chose comme ceci (manipulation omise erreur):
FILE *file = fopen("filename", "a");
fseek(file, -10, SEEK_END);
ftruncate(fileno(file), ftell(file)); // POSIX function
Il ne va pas travailler pour les encodages avec des caractères de longueur variable, tels que UTF-8 et UTF-16.
Pour quelque chose qui fonctionne sous Windows et que vous pourriez faire quelque chose comme ceci:
FILE* pFileIn = fopen("filenameIn", "rb");
FILE* pFileOut = fopen("filenameOut", "w+b");
fseek(pFileIn, -10, SEEK_END);
long length = ftell(pFile);
long blockSize = 16384;
void* pBlock = malloc(blockSize);
long dataLeft = length;
while(dataLeft > 0)
{
long toCopy = (dataLeft > blockSize) ? blockSize : dataLeft;
fread(pBlock, toCopy, 1, pFileIn);
fwrite(pBlock, toCopy, 1, pFileOut);
dataLef -= toCopy;
}
free(pBlock);
fclose(pFileIn);
fclose(pFileOut);
ce qui est l'encodage du fichier? –
Que diriez-vous d'une solution qui gère plus qu'un simple encodage de fichier? Je voudrais certainement upvote une telle réponse! :-) –
@Alceu. En pur C90? Commencez par setlocale(), ouvrez un fichier temporaire, lisez le tampon. Utilisez mblen() pour savoir quels octets font partie d'un caractère. Copiez les caractères dans le fichier temporaire excepté les dix derniers. Remplissez le tampon et répétez sans oublier de sortir les dix derniers caractères du tampon précédent. Copiez ensuite le contenu du fichier temporaire dans le fichier d'origine. Possible mais fastidieux. En C95, utilisez simplement getwc() et putwc() pour une solution plus évidente. – AProgrammer