voldemort Geschrieben 11. Januar 2010 Teilen Geschrieben 11. Januar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Januar 2010 Teilen Geschrieben 11. Januar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
InfoJunkie Geschrieben 12. Januar 2010 Teilen Geschrieben 12. Januar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
InfoJunkie Geschrieben 12. Januar 2010 Teilen Geschrieben 12. Januar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 12. Januar 2010 Teilen Geschrieben 12. Januar 2010 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
InfoJunkie Geschrieben 12. Januar 2010 Teilen Geschrieben 12. Januar 2010 (bearbeitet) 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 2010 von InfoJunkie Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
voldemort Geschrieben 16. Januar 2010 Autor Teilen Geschrieben 16. Januar 2010 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.