Datei kopieren

Hallo!

Ich habe mir mal vorgenommen ein kleines Backup-programm mit dem Borland Builder in C++ zu schreiben.
Nun will ich dafür erstmal garnicht soviel Aufwand betreiben und einfach die Datei von A nach B kopieren. Bisher habe ich dafür aber leider keinen C++ Befehl gefunden. Aber da die Funktion ja im Betriebsystem bereits implementiert ist kann man die doch sicher irgendwie über C++ aufrufen, ODER???
Ich weiß übrigens daß es in der Richtung schon sehr viel gute Freeware oder gar Windowstools usw. gibt und man nicht extra ein Programm dafür schreiben müßte, aber ich möchte es trotzdem tun.

Hoffe mir kann jemand helfen.

Vielen Dank im Voraus!

Hallo,

Ich habe mir mal vorgenommen ein kleines Backup-programm mit
dem Borland Builder in C++ zu schreiben.
Nun will ich dafür erstmal garnicht soviel Aufwand betreiben
und einfach die Datei von A nach B kopieren. Bisher habe ich
dafür aber leider keinen C++ Befehl gefunden. Aber da die
Funktion ja im Betriebsystem bereits implementiert ist kann
man die doch sicher irgendwie über C++ aufrufen, ODER???
Ich weiß übrigens daß es in der Richtung schon sehr viel gute
Freeware oder gar Windowstools usw. gibt und man nicht extra
ein Programm dafür schreiben müßte, aber ich möchte es
trotzdem tun.

Unter Windows kannst du die Funktion „CopyFile“ benutzen: CopyFile(„C:\a.txt“, „C:\b.txt“);

Alternativ kannst du auch einfach die Quelldatei auslesen (fopen, fread, fclose) und die Zieldatei schreiben (fopen, fwrite, fclose).

bye,
Christoph

Hallo,

Alternativ kannst du auch einfach die Quelldatei auslesen
(fopen, fread, fclose) und die Zieldatei schreiben (fopen,
fwrite, fclose).

bye,
Christoph

und dann feststellen, dass es so einfach doch nicht ist: die kopierte Datei hat nicht die alten Attribute (Owner, Zeitstempel), sondern ist eben eine neu geschriebene Datei.

Man muss also auch noch die Dateiattribute kopieren.

Gruss Reinhard

Unter Windows kannst du die Funktion „CopyFile“ benutzen:
CopyFile(„C:\a.txt“, „C:\b.txt“);

Alternativ kannst du auch einfach die Quelldatei auslesen
(fopen, fread, fclose) und die Zieldatei schreiben (fopen,
fwrite, fclose).

bye,
Christoph

Hi Christoph!
Zunächst danke für die schnelle Hilfe!

Jetzt aber noch eine Frage: Enspricht die Zeile

CopyFile(„C:\a.txt“, „C:\b.txt“);

der Syntax in C++? Ich frage deshalb so blöd weil ich in der Hilfedatei vom Builder unter CopyFile kein Ergebnis bekam.

Gruß Marco

Hallo,

und dann feststellen, dass es so einfach doch nicht ist: die
kopierte Datei hat nicht die alten Attribute (Owner,
Zeitstempel), sondern ist eben eine neu geschriebene Datei.

Man muss also auch noch die Dateiattribute kopieren.

das stimmt, aber davon bin ich eigentlich ausgegangen :wink:
Kommt halt stat() auch noch zum Zuge …

bye,
Christoph

Hallo,

Jetzt aber noch eine Frage: Enspricht die Zeile

CopyFile(„C:\a.txt“, „C:\b.txt“);

der Syntax in C++? Ich frage deshalb so blöd weil ich in der
Hilfedatei vom Builder unter CopyFile kein Ergebnis bekam.

Ja. Das ist eine Funktion der Windows API.

Wenn du die „Windows.h“ inkludierst, sollte diese auch vorhanden sein. Wenn nicht, solltest du deine Borland Dokumentation durchsuchen, obs nicht eine andere Funktion gibt, denn Borland ist ähnlich Microsoft … „Wir machen unsere eigenen Regeln“.

bye,
Christoph

PS: CopyFile() hat noch einen dritten Parameter „FailIfExists“, wahlweise auf true oder false zu setzen. ( http://msdn.microsoft.com/library/default.asp?url=/l… )

Hiho!

Ich gebs noch immer nicht auf…

Habe bisher folgendes als kleinen Test geschrieben:

void __fastcall TForm1::Button2Click(TObject *Sender)
{
bool hatGeklappt = CopyFile („C:\test\test.txt“,„C:\test\pipi.txt“,1);
if (hatGeklappt == false)
Memo1->Text = „Fuck!“;
else
Memo1->Text = „Freu!“;
}

Dreimal drfste raten was immer in meinem Momo-Feld erscheint. Windows.h ist included und der Compiler rennt durch ohne zu meckern, wobei es ihm egal ist ob ich als Dritten Parameter ein Bool oder Int eintrage.
Der link den Du mitgesandt hattest hatte mir auch nur bedingt weitergeholfen. Vielleicht sieht ja jemand nen dicken Klopper in meiner Syntax.
Oder kann es am BCB4.0 liegen? Eigentlich doch wohl nicht, da er den Code ohne Murren und Knurren compiliert.

Hoffe jemand weiß Rat…

Gruß Hudel

Hiho!

heihi.

void __fastcall TForm1::Button2Click(TObject *Sender)
{
bool hatGeklappt = CopyFile
(„C:\test\test.txt“,„C:\test\pipi.txt“,1);
if (hatGeklappt == false)
Memo1->Text = „Fuck!“;
else
Memo1->Text = „Freu!“;
}

Dreimal drfste raten was immer in meinem Momo-Feld erscheint.
Windows.h ist included und der Compiler rennt durch ohne zu
meckern, wobei es ihm egal ist ob ich als Dritten Parameter
ein Bool oder Int eintrage.

Wenn Compiler und Linker die Klappe halten, ist die Funktion bekannt und der Fehler liegt woanders.

Der Rückgabewert sagt ja nur, das die Datei nicht kopiert wurde, CopyFile() wurde also aufgerufen. Um näheres zu erfahren, musst Du unter Windows noch GetLastError() befragen, siehe SDK-Doku dazu.

Wenn Du Deine hartkodierten Dateinamen ansiehst, erkennst Du übrigens einzelne Backslashes, die der Compiler mit dem nachfolgenden t zusammen als \t = Tab interpretiert. Du versuchst deshalb, die Datei „C:estest.txt“ zu kopieren. Ich gehe davon aus, dass sie nicht existiert…

CopyFile("C:\\test\\test.txt","C:\\test\\harn.txt",1);


    
    Das ist der erste Punkt. Ansonsten wie gesagt auch GetLastError() auswerten, da das Kopieren durch diverse Umstände verhindert werden kann (Fehlende Rechte, Ziel existert aber kann nicht überschrieben werden, Platte voll, ...)
    
    Gruß,
    Ralf

Ich könnt Dich knutschen!!!
(werd das aber lieber stellvertretend meine freundin, wenns recht ist… :wink: )
Der Pfad wars Problem und da wäre ich so schnell auch nicht hinter gekommen…(zumindest nicht auf die korrekte Schreibweise)

Hier noch zum Abschluß meine jetzige Version (mit GetLastError)

void __fastcall TForm1::Button2Click(TObject *Sender)
{
bool hatGeklappt = CopyFile(„C:\amen.txt“,„C:\bmen123.txt“,false);
if (hatGeklappt == false)
Memo1->Text = GetLastError();
else
Memo1->Text = „Freu!“;
}

Übrigens hatte ich noch einen echt praktischen Link entdeckt:
http://www.vbapihelpline.de

Finden Sich ganz viele Antworten und Beispiele zu API und nicht zuletzt die Fehlercodeaufschlüsselung.

Jetzt kann ich mich ja doch mal so langsam dran geben mein Vorhaben in die Tat umzusetzen (aber erst nach kerneval…).

Nochmals vielenvielenvielen Dank an Alle für die Super Hilfe!!!

MfG Hudel