web-dev-qa-db-fra.com

Ajouter à la fin d'un fichier en C

J'essaie d'ajouter le contenu d'un fichier myfile.txt à la fin d'un second fichier myfile2.txt en c. Je peux copier le contenu, mais je ne trouve pas le moyen de l'ajouter. Voici mon code:

FILE *pFile;
FILE *pFile2;
char buffer[256];

pFile=fopen("myfile.txt", "r");
pFile2=fopen("myfile2.txt", r+);
if(pFile==NULL) {
    perror("Error opening file.");
}
else {
    while(!feof(pFile)) {
        if(fgets(buffer, 100, pFile) != NULL) {
        fseek(pFile2, -100, SEEK_END);
        fprintf(pFile2, buffer);
    }
}
fclose(pFile);
fclose(pFile2);

Je ne pense pas que j'utilise correctement fseek, mais ce que j'essaie de faire, c'est d'appeler fseek pour placer le pointeur à la fin du fichier, puis écrire à l'emplacement de ce pointeur, au lieu du début du fichier. fichier. Est-ce la bonne approche?

38
Sonofblip

Ouvrir avec append:

pFile2 = fopen("myfile2.txt", "a");

alors il suffit d'écrire dans pFile2, pas besoin de fseek().

61
cdarke

Après la documentation de fopen:

`` a '' Ouvert pour l'écriture. Le fichier est créé s'il n'existe pas. Le flux est positionné à la fin du fichier. Les écritures ultérieures dans le fichier se termineront toujours à la fin du fichier alors en cours, quel que soit le type de session (3) ou un événement similaire intervenu.

Donc, si vous pFile2=fopen("myfile2.txt", "a");, le flux est placé à la fin pour être ajouté automatiquement. il suffit de faire:

FILE *pFile;
FILE *pFile2;
char buffer[256];

pFile=fopen("myfile.txt", "r");
pFile2=fopen("myfile2.txt", "a");
if(pFile==NULL) {
    perror("Error opening file.");
}
else {
    while(fgets(buffer, sizeof(buffer), pFile)) {
        fprintf(pFile2, "%s", buffer);
    }
}
fclose(pFile);
fclose(pFile2);
15
Sergey L.