Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem bei Datei kopieren. SHFileOperation, CopyFile,... (https://www.delphipraxis.net/41513-problem-bei-datei-kopieren-shfileoperation-copyfile.html)

manuel 4. Mär 2005 14:46


Problem bei Datei kopieren. SHFileOperation, CopyFile,...
 
Hi Leute,

ich versuche schon seit einer Weile ein Programm zu schreiben, welches ein Backup von Benutzerdaten erstellt.

Eigentlich ein recht triviales Problem.
Nutze ich die SHFileOperation-Funktion bzw die doFileWork-Procedure von Sakura, FileStreams, oder die Funktion CopyFile werden manche Dateien nicht kopiert, weil sie nicht geöffnet werden können.

Hier der Quelltext für dir Streams:

Delphi-Quellcode:

function ThreadCopy.CopyFile(Source, Dest: String): Boolean;
var F, T: TFileStream;
begin
  try
    Result := true;
    try
      F := TFileStream.Create(Source, fmOpenRead);
      T := TFileStream.Create(Dest, fmOpenWrite);
      T.CopyFrom(F, 0);
    finally
      F.Destroy;
      T.Destroy;
    end;
  except
    Result := false;
  end;
end;
Werden Die Dateien mittels Windows von Hand kopiert, funktioniert das Kopieren fehlerlos.

Alle zu kopierenden Dateien sind geschlossen !
kann man das irgendwie einrichtren dass alle Dateien kopiert werden?

Gruß

Manuel

manuel 7. Mär 2005 10:43

Re: Problem bei Datei kopieren. SHFileOperation, CopyFile,..
 
Hallo...

hat denn keiner eine Idee? :(

Gruß

Manuel

shmia 7. Mär 2005 11:04

Re: Problem bei Datei kopieren. SHFileOperation, CopyFile,..
 
Beim Kopieren von Dateien muss man auf die Share-Attribute achten.
Du behauptest zwar, die Dateien wären alle geschlossen, aber das ist noch kein Beweis.
Beim Kopieren solltest du eventuelle Fehler mit protokollieren!!

Deshalb:
Delphi-Quellcode:
ThreadCopy = class(TThread)
private
   ...
   FErrors : string; // speichert die Kopierfehler
public
   ...
   property Errors : string read FErrors;
end;

function ThreadCopy.CopyFile(const Source, Dest: String): Boolean;
var F, T: TFileStream;
begin
  Result := false;
  try
    try
      F := TFileStream.Create(Source, fmOpenRead and fmShareDenyNone);
      T := TFileStream.Create(Dest, fmCreate);
      T.CopyFrom(F, 0);
      Result := true;
    finally
      F.Destroy;
      T.Destroy;
    end;
  except
    on E:Exception do
    begin
       // wir merken uns die Fehlermeldung aus der Exception
       // und die Dateinamen, die kopiert werden sollten !!!
       FErrors := FErrors+Source+'->'+Dest+' : '+E.Message+#13#10;
    end;
  end;
end;

manuel 7. Mär 2005 11:14

Re: Problem bei Datei kopieren. SHFileOperation, CopyFile,..
 
Hab den Fehler gefunden...
Hab mich bei der Zusammensetzung des Pfades vertippt :wall:
Muss passiert sein, als ich auf Threads umgestellt habe...

Trotzdem Danke an Shmia.
Die Prozedur werde ich entsprechend umbauen...

Manuel


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 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 by Thomas Breitkreuz