Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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.

Hups, hab noch mindestens einen Fehler drin.

Wer findet ihn? :D

Kleiner Tipp: Die Debian-DVD wurde korrekt kopiert, eine einfache Textdatei mit Inhalt "test" hingegen nicht.

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.

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.