![]() |
Delphi Programm soll dateien kopieren
Hallo,
Ich will gerade ein tool schreiben, welches dateien kopiert. Leider finde ich keinen Befehl, der mir die arbeit erleichtert. Gibt es dafür unter delphi keine befehle? :shock: Das einzige, daß ich gefunden habe ist "afilecopy". leider schreit mein compiler immer, daß er diesen bezeichner nicht kennt. :cry: Hat das schon mal wer gemacht und kann mir da helfen? Gruß Roland |
hi,
Der Befehl, den du suchst heisst
Code:
Ich hoffe es hat geholfen
Copyfile(Quell-Datei, Ziel-Datei, Boolean Variable Fileexist);
MFG Thomas |
Da wird man wohl die Befehle von Windows benutzen müssen -> siehe PSDK!
|
Also bei mir gehts mit Copyfile...
|
Danke für die schnelle Hilfe - manchmal sieht man den Wald vor lauter Bäumen nicht!!!
Habs ausprobiert :coder: läuft... Gruß Roland |
Zitat:
Delphi kennt keine Funktionen zum Datei kopieren. |
Moin Roland,
und für grössere Mengen auf einmal ginge dann auch noch SHFileOperation, die ist allerdings von den Parametern her unhandlicher. |
Zitat:
wo kriege ich mehr Info's über SHFileOperation? Gruß Roland |
|
Jetzt endlich noch meine Lösung von D3k:
![]() |
Hallo Zusammen
Habe da noch einetn Tip für Win2k Besitzer: Schaut Euch doch mal das ResourceKit an, da müsste as Proggi RoboCopy dabei sein. ist "nur* knapp 100KB gross und ist zum Kopieren von vielen Daten geeignet. Kann auch Verzeichnisse etc spiegel usw. Ist erheblich schneller als die Win-Api etc. Bauche das Prog um aus einem Delphi Programm ca 4000 Dateien synchron zu halten. Starte "einfach" ein neuer Prozess ... Habe mal den passenden Code unten für solche dies interessiert. Gruss Roger
Code:
try
Screen.Cursor := crHourglass; Result := False; StatusBar.Panels[1].Text := 'lokales Verzeichnis :' + slocalPath + ' wird mit :' + sRemotePath + ' abgeglichen .....'; if pnlMarker.Color = clBtnface then pnlmarker.Color := clRed; Application.ProcessMessages; sPara := sRemotePath + ' ' + slocalPath + ' '; { Source und Destination Verzeichnisse} sTemp := saMask[0]; { Filter für Einrichtpläne} sTemp := StringReplace(sTemp, ';', ' ', [rfReplaceAll]); sPara := SPara + sTemp + ' '; sTemp := saMask[1]; { Filter für NC - Programme} sTemp := StringReplace(sTemp, ';', ' ', [rfReplaceAll]); sPara := sPara + sTemp + ' '; sPara := sPara + '/S '; { Inklusive SubDirectorys} if LBoxEX_DIR.Items.Count > 0 then begin sPara := sPara + '/XD '; { Exclude Directorys} for iCounter := 0 to LBoxEX_DIR.Items.Count - 1 do begin if trim(LBoxEX_DIR.Items[iCounter]) <> '' then sPara := sPara + LBoxEX_DIR.Items[iCounter] + ' '; end; end; sPara := sPara + '/MIR '; {Befehl zum Mirroring} sPara := sPara + '/R:10 '; { 10 Versuche die Datei zu kopieren} spara := sPara + '/W:10 '; { jeweils 10Sek warten zwischen Versuchen} sPara := Spara + '/LOG:' + lbledtLogFile.Text; {und LogDatei erstellen} FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb := Sizeof(TStartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_HIDE; if CreateProcess(nil, { Anwendungsname} PChar(ExtractFilePath(Application.ExeName) + '\Robocopy.Exe ' + sPara), { Parameter} nil, { Security} nil, { Security} False, NORMAL_PRIORITY_CLASS, { Priorität} nil, { Environment} PChar(ExtractFilePath(Application.ExeName)), { Verzeichnis} StartupInfo, ProcessInfo) then begin WaitForSingleObject(ProcessInfo.hProcess, INFINITE); CloseHandle(ProcessInfo.hProcess); end else ShowMessage('Fehler beim starten des Kopiervorganges!'); TimerTimer(self); Result := True; Screen.Cursor := crDefault; except Result := False; MessageDLG('FEHLER beim Aufruf von Robocopy !' + #10 + #13 + ' Funktion : madeLocalCopy()', mtError, [mbOK], 0); end; |
Moin Roger,
wobei noch anzumerken wäre, dass man bei der Option /MIR sehr darauf aufpassen muss Quelle und Ziel nicht zu vertauschen. Im Extremfall hat man sonst statt einer Sicherung einen 100%igen Datenverlust. |
Hallo!
Ich möchte diesen Befehl auch gerne in meinem Programm nutzen haber aber noch folgendes Problem: CopyFile( Pfad ,'C:\save.dat',false); In dem String Pfad ist der Pfad zu der Datei gespeichert die ich kopieren möchte! Aber beim kompilieren kommt eine Fehlermeldung: Incompatible type String and PChar! |
Moin Masters,
erst einmal herzlich willkommen.
Delphi-Quellcode:
so sollte es gehen. Ich nehme mal an Pfad ist eine Variable vom Typ string.
CopyFile( PChar(Pfad) ,'C:\save.dat',false);
Da als erster Parameter ein PChar (also eigentlich ein Pointer auf einen nullterminierten String) erwartet wird, muss man dem Compiler noch mitteilen, dass er den String als PChar verarbeiten soll. |
Vielen dank für die schnelle hilfe
|
Re: Delphi Programm soll dateien kopieren
hi ich hab ein problem..
der compiler findet hier ein fehler.. ich weiß aber garnicht was ich machen soll ^^..
Delphi-Quellcode:
das is die fehlermeldung:
CopyFile(PChar(ExtractFilePath(ParamStr(0) + 'Programm.exe')),(ExtractFilePath(ParamStr(0) + 'Programm.bkp')),false);
[Pascal Fehler] Unit1.pas(219): E2010 Inkompatible Typen: 'string' und 'PAnsiChar' hoffe jemand kann mir helfen ich danke euch jetzt schonmal für eure hilfe ^^.. |
Re: Delphi Programm soll dateien kopieren
Delphi-Quellcode:
Du hast das 2. PChar vergessen ;)
CopyFile(PChar(ExtractFilePath(ParamStr(0) + 'Programm.exe')),PChar(ExtractFilePath(ParamStr(0) + 'Programm.bkp')),false);
|
Re: Delphi Programm soll dateien kopieren
hab ich doch???
oder kommt da noch ein pchar ^^ |
Re: Delphi Programm soll dateien kopieren
Ja, da kommen 2 hin (Ursprungsdatei, Ziel).
|
Re: Delphi Programm soll dateien kopieren
ich hab doch schon 2 drinstehen :?: :?: :?: :?: :?:
|
Re: Delphi Programm soll dateien kopieren
Zitat:
Delphi-Quellcode:
CopyFile(PChar{1}(ExtractFilePath(ParamStr(0) + 'Programm.exe')),{vergessen}(ExtractFilePath(ParamStr(0) + 'Programm.bkp')),false);
|
Re: Delphi Programm soll dateien kopieren
Zitat:
Delphi-Quellcode:
mfg,
CopyFile(PChar(ExtractFilePath(ParamStr(0)) + 'exDatei.exe'),PChar(ExtractFilePath(ParamStr(0)) + 'newDatei.bkp'),false);
geofranz |
Re: Delphi Programm soll dateien kopieren
hääää???
ich war mir zu 2000% sicher, dass da ein 2. PChar drinstand.. sorry ich habe mich wohl geirrt. aber da verliert mann leicht die übersicht bei so vielen klammern :D.. jetzt gehts aufjedenfall danke für eure hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz