An das Ende einer Datei in C anhängen

Lesezeit: 3 Minuten

Ich versuche, den Inhalt einer Datei myfile.txt an das Ende einer zweiten Datei myfile2.txt in c anzuhängen. Ich kann den Inhalt kopieren, aber ich finde keine Möglichkeit zum Anhängen. Hier ist mein 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);

Ich glaube nicht, dass ich fseek richtig verwende, aber ich versuche, fseek aufzurufen, um den Zeiger an das Ende der Datei zu setzen, und dann an der Stelle dieses Zeigers zu schreiben, anstatt am Anfang der Datei Datei. Ist das der richtige Ansatz?

  • (Zusätzlich zu den Antworten unten) Ihre fseek Idee sollte funktionieren, aber da verwenden Sie SEEK_END der ‘zeiger’ steht schon ganz am ende– und dann Sie gehen 100 Zeichen “zurück”. Verwenden 0 für den Offset und es sollte funktionieren. (Minor: Sie überprüfen, ob Ihre Lesedatei geöffnet werden kann, aber nicht Ihre Schreibdatei. Überprüfen Sie beide.)

    – Jongware

    17. Oktober 2013 um 14:27 Uhr

  • warum while( !feof( file ) ) niemals korrekt ist

    – Benutzer3629249

    20. Mai 2019 um 1:50 Uhr


  • Ein Tippfehler in Zeile 12, die geschweifte Klammer ist nicht geschlossen

    – Haschisch

    6. Juli 2020 um 2:15 Uhr

Mit Anhängen öffnen:

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

dann schreib doch einfach an pFile2kein Notwendigkeit für fseek().

  • Sie sollten jedoch beachten, dass ANSI C fseek() oder eine andere Positionierungsfunktion erfordert.

    – Wyatt Ward

    3. Januar 2016 um 17:38 Uhr

  • @ Wyatt8740: wo? Meine Norm sagt: “Das Öffnen einer Datei im Append-Modus (a als erstes Zeichen im Modus-Argument) bewirkt, dass alle nachfolgenden Schreibvorgänge in die Datei bis zum aktuellen Dateiende erzwungen werden, unabhängig von zwischenzeitlichen Aufrufen von fseek(). Zugegeben, das ist nicht ANSI C, sondern ISO C.

    – dunkel

    3. Januar 2016 um 22:56 Uhr

  • von GNUs man fopen: “Beachten Sie, dass ANSI C erfordert, dass eine Dateipositionierungsfunktion zwischen Ausgabe und Eingabe eingreift, es sei denn, eine Eingabeoperation trifft auf das Dateiende. ” Sieht so aus, als hätte ich es falsch gelesen, aber nur, wenn zwischen Eingabe und Ausgabe gewechselt wird.

    – Wyatt Ward

    4. Januar 2016 um 17:40 Uhr


  • @ Wyatt8740: Das ist fair genug, und das ist auch meine Erfahrung. Obwohl ich denke, wenn ich gleichzeitig lesen und schreiben würde, würde ich wahrscheinlich niedrigere Schnittstellen als stdio verwenden.

    – dunkel

    5. Januar 2016 um 10:28 Uhr

  • Wird mit “a” eine neue Zeile oder Inline angehängt?

    – Chaitanya

    5. Oktober 2019 um 20:23 Uhr

Nach der Dokumentation von fopen:

“a” Offen zum Schreiben. Die Datei wird erstellt, wenn sie nicht vorhanden ist. Der Stream wird am Ende der Datei positioniert. Nachfolgende Schreibvorgänge in die Datei enden immer am aktuellen Dateiende, unabhängig von dazwischenliegendem fseek(3) oder ähnlichem.

Also wenn du pFile2=fopen("myfile2.txt", "a"); Der Stream wird am Ende positioniert, um automatisch angehängt zu werden. mach einfach:

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);

1414910cookie-checkAn das Ende einer Datei in C anhängen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy