L'insertion de données dans un fichier en c
J'ai besoin d'ajouter une chaîne de caractères avant de les 45ème d'octets dans un fichier existant. J'ai essayé d'utiliser fseek
comme indiqué ci-dessous.
int main()
{
FILE *fp;
char str[] = "test";
fp = fopen(FILEPATH,"a");
fseek(fp,-45, SEEK_END);
fprintf(fp,"%s",str);
fclose(fp);
return(0);
}
Je m'attend à ce que ce code permettra d'ajouter "test" avant de les 45ème char d'expressions du FOLKLORE, au lieu de cela, il ajoute juste "test" pour les expressions du FOLKLORE.
S'il vous plaît aidez-moi à trouver la solution.
C'est la suite de ma question précédente
Ajout de l'élément dans un fichier avant la dernière ligne c
qui question précédente? Pourriez-vous s'il vous plaît lien?
Est fseek de retourner une erreur?
Merci alexandre et Brian. J'ai eu la solution ci-dessous.
Est fseek de retourner une erreur?
Merci alexandre et Brian. J'ai eu la solution ci-dessous.
OriginalL'auteur arun | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
De l'ouvrir avec le mode r+ (si elle existe déjà) ou a+ (si elle n'existe pas et que vous voulez le créer). Puisque vous êtes à la recherche d'45 octets avant la fin de fichier, je suis en supposant qu'elle existe déjà.
Le reste de votre code est bien. A noter aussi que ce ne sera pas insérer le texte, mais va écraser tout ce qui est actuellement à cette position dans le fichier.
c'est à dire, si votre fichier ressemble à ceci:
Puis après l'exécution de ce code, il ressemblera à ceci:
Si vous voulez vraiment d'insertion et de ne pas écraser, alors vous avez besoin de lire tout le texte à partir SEEK_END-45 à EOF en mémoire, écrire test et ensuite écrire le texte
OriginalL'auteur bluesmoon
Ne l'ouvrez que append (
a
) si vous prévoyez d'écrire, à l'arbitraire des postes; elle force toutes les écritures à la fin du fichier. Vous pouvez utiliserr+
de lire ou d'écrire n'importe où.OriginalL'auteur Matthew Flaschen
Pour éviter la plate-forme des configurations spécifiques, toujours explicitement indiquer binaire ou en mode texte dans votre fopen ().
Cela permettra d'économiser des heures de désespoirs si vous portez votre code un jour.
OriginalL'auteur Pierre