Frage

Ich versuche, eine Datei aus einer bestimmten Bibliothek in das aktuelle Verzeichnis zu kopieren. Ich kann Textdateien perfekt kopieren. Alle anderen Dateien werden beschädigt. Das Programm erkennt einen Feof, bevor es sollte.

#include <stdio.h>

int BUFFER_SIZE = 1024;
FILE *source;
FILE *destination;
int n;
int count = 0;
int written = 0;

int main() {
    unsigned char buffer[BUFFER_SIZE];

    source = fopen("./library/rfc1350.txt", "r");

    if (source) {
        destination = fopen("rfc1350.txt", "w");

        while (!feof(source)) {
            n = fread(buffer, 1, BUFFER_SIZE, source);
            count += n;
            printf("n = %d\n", n);
            fwrite(buffer, 1, n, destination);
        }
        printf("%d bytes read from library.\n", count);
    } else {
        printf("fail\n");
    }

    fclose(source);
    fclose(destination);

    return 0;
}
War es hilfreich?

Lösung

Sind Sie auf einem Windows -Computer? Versuchen Sie, "B" zu den Moduszeichenfolgen in den Aufrufen zu "B" hinzuzufügen fopen.

Von Man fopen (3):

Die Modus-Zeichenfolge kann auch den Buchstaben 'B' entweder als letztes Zeichen oder als Zeichen zwischen den Zeichen in einem der oben beschriebenen Zwei-Charakter-Zeichenfolgen enthalten. Dies ist ausschließlich für die Kompatibilität mit C89 und hat keine Wirkung. Das 'B' wird auf allen POSIX -Konformierungssystemen, einschließlich Linux, ignoriert. (Andere Systeme behandeln Textdateien und binäre Dateien möglicherweise anders, und das Hinzufügen des 'B' kann eine gute Idee sein, wenn Sie I/A zu einer binären Datei ausführen und erwarten, dass Ihr Programm möglicherweise auf Nicht-Unix-Umgebungen portiert wird.)

Andere Tipps

Sie müssen die angeben "b" Option zu fopen:

source = fopen("./library/rfc1350.txt", "rb");
...
destination = fopen("rfc1350.txt", "wb");

Ohne sie wird die Datei im Text geöffnet ("t") Modus, und dies führt zur Übersetzung von Zeichen am Ende der Line.

Sie müssen die Dateien eher im Binärformat als im Textformat öffnen. In Ihren Anrufen zu fopen, verwenden "rb" und "wb" statt "r" und "w" beziehungsweise.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top