![]() |
AW: CopyFile Datei wird nicht überschrieben
Also das funktioniert ganz wunderbar
Delphi-Quellcode:
uses
System.IOUtils, System.SysUtils, System.Types; procedure CopyFiles( const SourceFiles : array of string; const DestinationFolder: string; FileExistsCallback : TFunc<string, Boolean>; FileFailCallback : TProc<string, string> ); var Index : Integer; Source, Target: string; FailIfExists : Boolean; LastError : Cardinal; begin for index := low( SourceFiles ) to high( SourceFiles ) do begin Source := SourceFiles[ index ]; Target := TPath.Combine( DestinationFolder, TPath.GetFileName( Source ) ); FailIfExists := True; while True do begin if not CopyFile( PChar( Source ), PChar( Target ), FailIfExists ) then begin LastError := GetLastError; if ( LastError <> ERROR_FILE_EXISTS ) or not FailIfExists then begin FileFailCallback( Source, SysErrorMessage( LastError ) ); Break; end; if not FileExistsCallback( Source ) then begin FileFailCallback( Source, 'UserChoice' ); Break; end; FailIfExists := False; end else Break; end; end; end; procedure TForm1.Button1Click( Sender: TObject ); var SourceFiles : TStringDynArray; DestinationFolder: string; begin SourceFiles := TDirectory.GetFiles( TPath.GetDocumentsPath ); DestinationFolder := TPath.GetTempPath; ListBox1.Items.Clear; CopyFiles( SourceFiles, DestinationFolder, function( Filename: string ): Boolean begin ListBox1.Items.Add( 'EXISTS: ' + Filename ); Result := MessageDlg( {} string.Format( 'Die Datei %s existiert bereits' + sLineBreak + 'Soll diese überschrieben werden?', [ Filename ] ), {} mtWarning, {} mbYesNo, {} 0 ) = mrYes; end, procedure( Filename, Reason: string ) begin ListBox1.Items.Add( 'FAILS: ' + Filename + ' REASON: ' + Reason ); end ); end; |
AW: CopyFile Datei wird nicht überschrieben
Ersetze doch einfach mal CopyFile(... mit IOUtils.TFile.Copy(...
vielleicht so:
Delphi-Quellcode:
Bei mir funktioniert diese Variante unter allen Windows-Versionen einwandfrei. Mit copyfile(... hatte ich zuvor auch gelegentlich so einige "Probleme".
...
uses IOUtils, ... function IO_CopyFile(dQuelle,dZiel:string):boolean; begin Result:=false; if IOUtils.TFile.Exists(ExtractFilePath(dQuelle) + ExtractFileName(dQuelle)) then try //falls das Ziel-VZ nicht existiert, dann erstellen: if not TDirectory.Exists(ExtractFilePath(dZiel)) then IOUtils.TDirectory.CreateDirectory(ExtractFilePath(dZiel)); IOUtils.TFile.Copy(dQuelle,dZiel,true); ..... Result:=true; .... except end; end; Ralf |
AW: CopyFile Datei wird nicht überschrieben
Alles klar, danke. Beide wege funktionieren komischerweise. :)
Scheint wohl tatsächlich Probleme zu machen, die CopyFile-Methode... Problem gelöst, danke! |
AW: CopyFile Datei wird nicht überschrieben
Zitat:
Delphi-Quellcode:
... ohne Probleme. Dann scheint das Problem wohl doch in deinem Code zu sein, gelle?
CopyFile
|
AW: CopyFile Datei wird nicht überschrieben
Zitat:
|
AW: CopyFile Datei wird nicht überschrieben
Zitat:
Die Hinweise hier waren aber so gesehen richtig. Wie du die umgesetzt hast kann ich nicht beurteilen. Macht man alles richtig, funktioniert es im Normalfall auch ;) |
AW: CopyFile Datei wird nicht überschrieben
Zitat:
Zitat:
Zitat:
|
AW: CopyFile Datei wird nicht überschrieben
Ohne jetzt alle 26 Antworten gelesen zu haben, meine erste Vermutung wäre dass das FailIfExists der Fehler ist.
Wenn ich mich nicht irre, dann ploppt die MsgBox auf "Möchten sie die datei übschreiben [...] ?" [Yes, No]. Wenn man dort dann Yes auswählt, dann wird true zurückgeliefert, was die Variable FailIfExist auch auf true setzt. Demnach wird bei CopyFile(,,True) übergeben und somit failed logischreweise das Replace. |
AW: CopyFile Datei wird nicht überschrieben
Nein, wenn dort Yes ausgewählt wird, dann wird
Delphi-Quellcode:
zurückgeliefert und dann wird
mrYes
Delphi-Quellcode:
eben
FailIfExists := MessageDlg(...) <> mrYes;
Delphi-Quellcode:
.
false
|
AW: CopyFile Datei wird nicht überschrieben
Weil ich zwar nicht neugierig bin, aber immer alles wissen möchte: :lol:
Läßt sich mal der KOMPLETTE Code von Dennis07 erhalten ? Zwar habe ich nur maximal XP und Delphi 7, aber es wäre immerhin möglich, daß er etwas benutzt, das mit so alten Sachen noch funktioniert ... :roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 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