voldemort Geschrieben 11. Januar 2010 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
Klotzkopp Geschrieben 11. Januar 2010 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.
InfoJunkie Geschrieben 12. Januar 2010 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.
InfoJunkie Geschrieben 12. Januar 2010 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.
Klotzkopp Geschrieben 12. Januar 2010 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.
InfoJunkie Geschrieben 12. Januar 2010 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
voldemort Geschrieben 16. Januar 2010 Autor 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden