Zum Inhalt springen

Probleme beim kopieren per Dateizugriff


voldemort

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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