Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Do 28.03.19 22:58 
Hallo,
ich schlage mich mit der CopyFile-Funktion herum. Habe ein Programm das Dateien kopiert und nutze bisher folgende Funktion (gekürzt und alle try-except, Result zur Übersicht weggelassen)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function FileCopy(sVon,sNach: String ):  Boolean;
 var S,D: TFileStream;    // Source & Destination
begin {FileCopy}
  Result := False;
  S := TFileStream.Create(sVon, fmOpenRead );
  D := TFileStream.Create(sNach, fmOpenWrite or fmCreate );
  D.CopyFrom(S, S.Size ) ;
  D.Free;
  S.Free;
end;

Dieser Tage scheiterte ich bei großen Dateien, Funktion kommt möglicherweise an ihre Grenzen?. Habe mp4-Datei > 3 GB kopiert. Hier wird die Routine nicht mehr fertig, liefert aber auch keine Anzeigen. Wollte nun die CopyFile-Funktion nutzen. Hier finde ich in einem Forum folgende Funktion, die mir gleichzeitig die Arbeit der Datumsanpassung abnehmen würde.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
 TCopyFileFlag = (cffOverwriteFile, cffCreateDestDirectory, cffPreserveTime );
 TCopyFileFlags = set of TCopyFileFlag;
 
function CopyFile(const SrcFilename, DestFilename: string): boolean;
function CopyFile(const SrcFilename, DestFilename: string; PreserveTime: boolean): boolean;
function CopyFile(const SrcFilename, DestFilename: string; Flags: TCopyFileFlags=[cffOverwriteFile]): boolean;

uses 
...
fileutil
...

CopyFile(SourceName, DestName, [cffPreserveTime, cffOverwriteFile]);

Mein Problem: Es wird Uses FileUtil benötigt. Ich arbeite mit RAD-Studio Berlin 10.2. Dieser Compiler stellt diese Funktion nicht bereit.
Mein zweiter Versuch war, mit einer Microsoft-Routine zu arbeiten
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
BOOL CopyFile(
  LPCTSTR lpExistingFileName,
  LPCTSTR lpNewFileName,
  BOOL    bFailIfExists
);

Beim Befehl
ausblenden Delphi-Quelltext
1:
if CopyFile(sVon, sNach, false) = 0 then					

meckert auch hier der Compiler mit: E2010 Inkompatible Typen: 'PWideChar' und 'string'. Dabei werden Pfadnamen doch imer als String übergeben.
Kann mir jemand zur einen oder anderen Variante hilfreiche Tipps geben, damit ich zumindest mal compilieren und testen kann.
MfG hRb
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 28.03.19 23:35 
- Nachträglich durch die Entwickler-Ecke gelöscht -
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Do 28.03.19 23:53 
Hallo Frühlingsrolle,
warst mal wieder schneller!!! Habe gerade noch etwas entdeckt, was auch funktioniert:
ausblenden Delphi-Quelltext
1:
if CopyFile(@sVon[1], @sNach[1], false) = false then ...					

Habe tatsächlich den Eindruck, dass diese Funktion deutlich schnelller ist und vor allem zu Ende kommt. Werde mir auch noch CopyFile2 ansehen und ggf. Fortschritttsanzeige einblenden.
Jedenfalls Danke
hRb
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.03.19 00:14 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1181
Erhaltene Danke: 96

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: So 31.03.19 14:04 
Hallo,

ich arbeite mit WinApi.ShellAPI -> SHFileOperation. Ist die Schnittstelle zur Windows eigenen Routine zum kopieren, verschieben, löschen.
Eine neuere Variante ist IFileOperation. Aber MS weißt selber darauf hin dass die Interface Implementierung nicht Threadsave ist und man in dem Fall bei SHFileOperation bleiben soll.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Do 04.04.19 23:17 
Danke, wieder was gelernt.
hRb