Zum Inhalt springen

Probleme beim kopieren per Dateizugriff


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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.

Geschrieben

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.

Geschrieben
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.
Geschrieben (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 von InfoJunkie
Geschrieben

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 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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...