Veröffentlicht 11. Januar 201015 j hallo zusammen, ich habe hier kleinere probleme mit meinem code. ich möchte zwei dateien kopieren und diese in eine neue datei schreiben. die dateien müssen nicht in der konsole ausgegeben werden. die txt wird fehlerfrei kopiert ; die jpeg datei leider nicht. int zeichen; FILE * datei = fopen("c:\\test.txt","r b"); FILE * kopie = fopen("c:\\kopie.txt","w b"); FILE * bild = fopen("c:\\gitarre.jpeg","r b"); FILE * bildc = fopen("c:\\gitarrekopie.jpeg","w b"); if (datei == NULL) { printf("Mist\n"); } do { zeichen = fgetc(datei); if (zeichen == EOF) { break; } printf("%c",zeichen); fputc(zeichen,kopie); fputc (bild,bildc); }while (zeichen != EOF); printf("\n"); fclose(datei); fclose(kopie); fclose(bild); fclose(bildc); return 0; sieht jemand den fehler? beste grüße Voldemort
11. Januar 201015 j fputc (bild,bildc); Schau dir das nochmal genau an, so ist das totaler Blödsinn. Außerdem solltest du nicht versuchen, beide Dateien in einer einzigen Schleife zu kopieren. Die Wahrscheinlichkeit, dass beide gleich groß sind, ist doch ziemlich gering. Selbst, wenn du das da oben richtig hinbekommen hättest, würde das Kopieren der Bilddatei abgebrochen, sobald die Textdatei komplett kopiert ist.
12. Januar 201015 j Was Du benutzen möchtest ist die binäre Kopie mit fread und fwrite. Das klappt mit allen, unter anderem auch Textdateien . Ich hab mal was zusammengehackt: #include <stdio.h> #include <stdlib.h> // Defines #define FILE_ORIG "QUELLE" #define FILE_COPY "ZIEL" #define BUFFER_SIZE 1024 typedef unsigned char BYTE; /********************* MAIN ***************************/ int main (int argc, const char * argv[]) { FILE *pic = fopen(FILE_ORIG, "r"); FILE *pic_cp = fopen(FILE_COPY, "w"); if (pic == NULL) { printf("Could not open file '%s'\n\n", FILE_ORIG); return EXIT_FAILURE; } if (pic_cp == NULL) { printf("Could not open file '%s'\n\n", FILE_COPY); return EXIT_FAILURE; } // Lesebuffer BYTE buf[BUFFER_SIZE]; long i = 0; // Byteweise Kopie erstellen while( fread(&buf, sizeof(BYTE), BUFFER_SIZE, pic) ) { fwrite(&buf, sizeof(BYTE), BUFFER_SIZE, pic_cp); i+=BUFFER_SIZE; } // Ausgabe der kopierten Datenbloecke (hier: Umgerechnet in MB) double size = (double)i / (BUFFER_SIZE * BUFFER_SIZE); printf("%.2lf MB written...\n\n", size); fclose(pic_cp); fclose(pic); return EXIT_SUCCESS; } Im nächsten Schritt könntest Du ja mal versuchen den Hauptteil in eine Funktion auszulagern.
12. Januar 201015 j Hups, hab noch mindestens einen Fehler drin. Wer findet ihn? Kleiner Tipp: Die Debian-DVD wurde korrekt kopiert, eine einfache Textdatei mit Inhalt "test" hingegen nicht.
12. Januar 201015 j Was Du benutzen möchtest ist die binäre Kopie mit fread und fwrite.Auch fread und fwrite bewirken unter Windows die Umwandlung von von Zeilenumbrüchen, wenn die Filestreams nicht im Binärmodus geöffnet wurden. Eine automatische binäre Kopie erreichst du damit nicht.
12. Januar 201015 j EDIT: Habe den vorigen Post falsch verstanden... Du hast natürlich Recht. Kurzum: fopen(<QUELLE>, "rb"); und "wb" für die Kopie sollten das Problem lösen . Aber ich denke voldemort kommt jetzt selbst weiter oder? Bearbeitet 13. Januar 201015 j von InfoJunkie
16. Januar 201015 j ich bin bestens weiter gekommen. es war einfach nur ein deklarationsfehler meinerseits danke mal wieder an dieser stelle und noch ein schönes wochenende grüße
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.