AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) CopyFile Datei wird nicht überschrieben

CopyFile Datei wird nicht überschrieben

Ein Thema von Dennis07 · begonnen am 11. Okt 2015 · letzter Beitrag vom 22. Okt 2015
Antwort Antwort
Seite 3 von 4     123 4   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#21

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 10:02
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ergo2000

Registriert seit: 21. Jan 2013
Ort: Berlin
4 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 10:04
Ersetze doch einfach mal CopyFile(... mit IOUtils.TFile.Copy(...
vielleicht so:

Delphi-Quellcode:
...
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;
Bei mir funktioniert diese Variante unter allen Windows-Versionen einwandfrei. Mit copyfile(... hatte ich zuvor auch gelegentlich so einige "Probleme".

Ralf
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
479 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 12:59
Alles klar, danke. Beide wege funktionieren komischerweise.
Scheint wohl tatsächlich Probleme zu machen, die CopyFile-Methode...

Problem gelöst, danke!
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 13:28
Alles klar, danke. Beide wege funktionieren komischerweise.
Scheint wohl tatsächlich Probleme zu machen, die CopyFile-Methode...

Problem gelöst, danke!
ich verwende aber CopyFile ... ohne Probleme. Dann scheint das Problem wohl doch in deinem Code zu sein, gelle?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
479 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 21:30
ich verwende aber CopyFile ... ohne Probleme. Dann scheint das Problem wohl doch in deinem Code zu sein, gelle?
Naja, aber dann wohl nicht nur in meinem. Denn alle anderen Lösungen hier funzten genauso wenig
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#26

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 21:34
ich verwende aber CopyFile ... ohne Probleme. Dann scheint das Problem wohl doch in deinem Code zu sein, gelle?
Naja, aber dann wohl nicht nur in meinem. Denn alle anderen Lösungen hier funzten genauso wenig
Es gibt halt mehr falsch als richtig, darum ist die Trefferquote für richtig auch so gering.

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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
479 Beiträge
 
Delphi 11 Alexandria
 
#27

AW: CopyFile Datei wird nicht überschrieben

  Alt 14. Okt 2015, 23:27
Die Hinweise hier waren aber so gesehen richtig.
Hab ich auch nie in Frage gestellt.

Wie du die umgesetzt hast kann ich nicht beurteilen.
Copy & paste...

Macht man alles richtig, funktioniert es im Normalfall auch
Der "Normalfall"... jaja, das geile daran ist ja dass der selbst so gut wie nie eintrifft...
Dennis
  Mit Zitat antworten Zitat
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#28

AW: CopyFile Datei wird nicht überschrieben

  Alt 21. Okt 2015, 20:00
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.

Geändert von Lyan (21. Okt 2015 um 20:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

AW: CopyFile Datei wird nicht überschrieben

  Alt 21. Okt 2015, 21:54
Nein, wenn dort Yes ausgewählt wird, dann wird mrYes zurückgeliefert und dann wird FailIfExists := MessageDlg(...) <> mrYes; eben false .
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#30

AW: CopyFile Datei wird nicht überschrieben

  Alt 21. Okt 2015, 22:36
Weil ich zwar nicht neugierig bin, aber immer alles wissen möchte:

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 ...

Geändert von delnu (21. Okt 2015 um 22:38 Uhr) Grund: Ich hatte das Wort "aber" vergessen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz