File kopieren

Hallo,

Ich möchte in C ein Programm machen. Der Benutzer soll eine gewünschte Quelldatei öffnen können, und die soll dann kopiert werden,d.h. die geöffnete Datei kann dann mit Eingabe eines neuen Dateinamens als Kopie gespeichert werden. Nun habe ich mir gedach, dass ich die „Zeichen“ der geöffneten Datei in einen String schreibe, und den String dann in die neue Datei schreibe.Ich habe diese Frage schon in einem anderen Forum gestellt, und da meintet Sie nur das das nicht ginge. Ich hoffe ihr könnt mir helfen.

Danke!!!

Hallo,

sowas gibt es schon. Aber wenn du es unbedingt noch einmal erfinden willst: Strings werden unter C normalerweise mit einem NUL-Zeichen beendet, d.h. die Funktionen, die mit str… anfangen, hören auf, wenn sie auf ein Byte mit dem Wert 00 treffen, und sind daher für allgemeine binäre Daten ungeeignet. Du must die Funktionen verwenden, die mit mem… anfangen.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Maier

Ich möchte in C ein Programm machen. Der Benutzer soll eine
gewünschte Quelldatei öffnen können, und die soll dann kopiert
werden,d.h. die geöffnete Datei kann dann mit Eingabe eines
neuen Dateinamens als Kopie gespeichert werden. Nun habe ich
mir gedach, dass ich die „Zeichen“ der geöffneten Datei in
einen String schreibe, und den String dann in die neue Datei
schreibe.Ich habe diese Frage schon in einem anderen Forum
gestellt, und da meintet Sie nur das das nicht ginge. Ich
hoffe ihr könnt mir helfen.

Wie Reinhardt schon sagte, das geht schon so (ähnlich).
Um noch eine andere Lösung anzudeuten, dafür gibt es
die Funktionen fread() und fwrite() aus der Standard-
bibliothek.

Das Programm würde in etwa so aussehen (Pseudo):

 char name\_orig[MAXPATH];
 char name\_copy[MAXPATH];

 char puffer[8192];

 main() 
 {
 if( abfrage( name\_orig, name\_copy) != 0 ) {
 kopiere\_dateien(name\_orig, name\_copy);
 }
 ...
 }
 ...
 ...

 int abfrage(char n\_orig[], char n\_copy[]) 
 {
 printf("alter name: %s\n", n\_orig);
 printf("neuer name: " );
 fflush(stdout);
 n\_copy[0] = '\0'; 
 scanf("%s", n\_copy);
 return strlen(n\_copy);
 }

 int kopiere\_dateien(char n\_orig[], char n\_copy[])
 {
 FILE\* f\_orig = fopen(n\_orig "rb");
 FILE\* f\_copy = fopen(n\_copy "wb");
 int nbytes;

 while( (nbytes=fread(puffer, sizeof(puffer), 1, f\_orig)) \> 0 ) {
 fwrite(puffer, nbytes, 1, f\_copy);
 } 
 fclose(copy);
 fclose(orig);
 return 1;
 }

(ungetestet)

Grüße

CMБ

Hiho!

Ich hatte mal mit einem ähnlichen Problem gekämpft, als ich die Eingabewerte aus Editfeldern im Programm verarbeiten und in eine INI speichern und später dann von der auslesen wollte um eine einmal festgelegte Datei zu einem einmal festgelegten Ort zu kopieren.

AnsiString FinalZiel; //Kann beispielsweise von einem Editfeld stammen

char* Ziel = FinalZiel.c_str();//konvertiert den AnsiString um

bool Ergebnis = CopyFile(Quelle,Ziel, false);
//Kopieren - Quelle,Ziel, 0 (oder false für überschreiben) / 1 (oder //true für nicht überschreiben)

//Wenn Ergebnis „false“ erhält hat was nicht geklappt

Dann kannst Du Dir noch den Fahlergrund abfragen

Fehler = GetLastError(); //Abfrage des Api-Fehlers
ApiFehler = StrToInt(Fehler);

und aufschlüsseln

//Aufschlüsselung des Fehlercodes
switch (ApiFehler)

Ich fand die Geschichte so etwas einfacher, aber das ist wohl Geschmacksache.

Noch viel Erfolg!

Gruß Hudel

hallo,

guck doch mal hier:
http://cplusplus.com/ref/cstdio/
da findest du die fopen, fwrite, etc. alles sehr gut erklärt,
immer mit Beispielen, geht für Binär- und auch Text-Dateien.

lg
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]