C Quelltext für ein einfaches Kopierprogramm

foggy80

Lt. Commander
Registriert
Juli 2008
Beiträge
1.034
Hallo alle miteinander,
Ich bin ein Programmieranfänger und versuche in C zu programmieren. Um etwas Skill zu bekommen hab ich ein schlaues Buch, hab aber erst angefangen es zu lesen. Dieses Buch kann mir aber leider nicht verraten wie ich auf einfache Art und Weise ein Programm schreiben kann, das Dateien kopieren kann. Im Internet bin ich auf ein Paar Informationen gestoßen und hab folgenden Quelltext geschrieben.

int main (void) {
CopyFile ("d:\\alles.txt","f:\\",true);
return EXIT_SUCCESS;
}

Mein Debugger (Entwicklungsumgebung Code::Blocks) meint dazu:
`CopyFile' was not declared in this scope|
`EXIT_SUCCESS' was not declared in this scope|

Wie man rauslesen kann, versuche ich die alles.txt aus d:\ nach f:\ zu kopieren.

Was ist an diesem Quelltext falsch? Muss ich da eine bestimmte Bibliothek miteinbinden?

Danke,
foggy
 
Ja, CopyFile ist eine Funktion von Microsoft, du brauchst den <windows.h>!
Was das EXIT_SUCCESS angeht, schreib stattdessen einfach eine 0, das ist genau das gleiche...

Gruß
BlackMark
 
Versuch mal auf der gleichen Platte zu bleiben, also nicht von D nach F, sondern bleib auf D.

Gruß
BlackMark
 
@Gluehwurm: Ach ja, du hast recht. Das hab ich glatt überlesen :D

@foggy80: CopyFile sollte auch von D auf F gehen, aber MoveFile geht nur innerhalb einer Platte.
Festplattenübergreifend wird die Datei dann nur kopiert und nicht verschoben!

Gruß
BlackMark
 
Wobei du, wenn du C lernen möchtest, vielleicht das Kopieren besser mal selbst in C realisieren solltest, statt nur eine betriebssystemspezifische Bibliotheksfunktion aufzurufen.
 
naja, eigentlich muss man doch nur zwei Dateien öffnen. Eine zum lesen und eine zum schreiben und dann innerhalb einer Schleife Blöcke aus der Quelle in einen Puffer lesen und dann den Pufferinhalt in die Zieldatei schreiben - solange bis die Länge der Quelldatei erreicht ist oder ein Fehler auftrat.

Fehlerüberprüfung, wichtig!
 
Das würde sogar ohne Schleife gehen.
In der ANSI C Standardbiblothek gibt es ftell(), sehr nützliche Funktion.
Mit fseek() an's Ende springen und mit ftell() sich die größe besorgen.
Den Puffer dann anlegen und rüber kopieren.
 
Wie groß soll denn der Puffer dann werden bei großen Dateien? Denke für die meisten Zwecke sollten 16384 byte reichen - habe solche Sachen allerdings seit ca. 1994 nicht mehr gemacht; vielleicht macht man das heute ja anders :-)
 
Code:
FILE *f = fopen("testdatei", "r"), *w = fopen("testcopy", "w");
if(!f || !w)
    // error
fseek(f, 0, SEEK_END);
long puffer_size = ftell(f);
rewind(f);
unsigned char *puffer = (unsigned char*)malloc(sizeof(unsigned char)*puffer_size);
if(!puffer)
    // error
fread(puffer, sizeof(unsigned char), puffer_size, f);
fclose(f);
fwrite(w, sizeof(unsigned char), puffer_size, w);
fclose(w);
free(puffer);

So würde ich dies machen.
Hab es jetzt eben aus'm Kopf geschrieben, Fehler können also durch aus drin sein, wobei ich das nicht glaube.
 
Ich bin jetzt nicht davon ausgegangen das du eine 4 GB Datei kopieren möchtest, aber wenn du eine 4 GB Datei kopieren willst, dann ist auch die Methode nicht gerade die schnellste, aber gut sie würde klappen (meine auch, aber die würde 4GB RAM weg schnappen :p). ;)
 
Zurück
Oben