![]() |
Dateien performant mit Callback kopieren
Mit welcher Technik ließt und schreibt man am schnellsten / besten Daten von und auf eine Festplatte, sodass ich in einer Callbackprozedur zeitgleich Daten wie bereits kopierte Bytes, Dateigröße und Dateiname abfragen kann?
Ich bin über jegliche Hilfe dankbar. |
AW: Dateien performant mit Callback kopieren
Je nachdem um was für Inhalt es sich handelt gäbe es verschiedene Lösungen.
Geht es nur darum Datei A nach Datei B zu kopieren, Api oder TFileStreams. Über Api kann ein Windows-Kopieren Dialog eingeblendet werden. Über TFileStream liegt alles bei Dir. Damit habe ich gute Erfahrungen sammeln können bei ca 64kb chunks. Benötigt man auch noch spezielle Attribute, oder Dateiberechtigungen, ist erheblich mehr Aufwand nötig. |
AW: Dateien performant mit Callback kopieren
Es geht nur um Datei von A nach B.
Jedoch komplett ohne Windows-Dialoge. Nur Eigenbau. |
AW: Dateien performant mit Callback kopieren
Ein Möglicher Ansatz, nur hier im Editor erstellt als Vorwarnung....
Delphi-Quellcode:
Noch wird nichts geprüft, noch wird alles in einem Rutsch erledigt, das soll lediglich die Basics verdeutlichen.
Procedure DollyCopy(const SourceFilename, TargetFilename: string);
var Source, Target: TFileStream; Begin Source := TFileStream.Create(SourceFilename, fmOpenRead); Try Target := TFileStream.Create(TargetFilename, fmOpenWrite OR fmCreate); Try Target.CopyFrom(Source, Source.Size); Finally Target.Free; End; Finally Source.Free; End; End; Es gibt auch zig andere Möglichkeiten.... so in etwa sieht meine auch aus, nur das ich nicht alles auf einmal lese/schreibe. |
AW: Dateien performant mit Callback kopieren
also ich hab das immer so gemacht:
Delphi-Quellcode:
Datei1Str := 'C:\Datei.txt';
Datei2Str := 'D:\Datei.txt'; if FielExists(Datei) then ErfolgBool := CopyFile (pchar(Datei1Str),pchar(Datei2Str), TRUE ); // wenn bei Parameter 3 True gesetzt ist, wird abgebrochen, falls die Datei bereits existiert //bei FALSE wird die Datei gnadenlos überschrieben. |
AW: Dateien performant mit Callback kopieren
![]() Da ist es mit BlockRead/Write realisiert worden. edit: Ps: Am performantesten ist es so wenig wie möglich in GUI darzustellen, am schlimmsten wäre zum Beispiel eine ProgressBar die jedes Byte hochzählt. |
AW: Dateien performant mit Callback kopieren
Ein gibt garnichts, was am Performantesten ist.
* wie viel wird kopiert (Anzahl und Größe) * von wo nach wo wird kopiert (HDD, SDD, SD, NetShare, ...) * wie viel RAM ist frei (da alles bissher hier genannte mit FileCache kopiert) * wie sind die Controller/Treiber von Quelle und Ziel eingestellt (mit oder ohne Cache ... z.B. bei externen Datenträgern für "schnelles" entfernen) * ... Je nach Bedinungen ist etwas anderes performanter. * mit oder ohne Lesecache kopieren (Cache im Controller und RAM) und wenn ja, mit wieviel * mit Schreibcache kopieren oder ohne FileCache im RAM * direkt auf die Platte oder nur in Cache (pass through) * bei Netzwerken kann es eventuell schneller sein, auch noch Multithreaded zu arbeiten, also mehrere Dateien/Dateiteile gleichzeitig übertragen (wenn die Übertragung eines einzelen Kanals limitiert ist) * ... |
AW: Dateien performant mit Callback kopieren
Was hast Du vor?
Wenn Du selbst kopierst, kennst Du Dateinamen und Dateigröße, also warum abfragen? Du könntest mit mehreren Threads die Dateien kopieren, aber wenn das auf nur einer Festplatte stattfinden soll, ist das eher kontraproduktiv. Sei's drum, Du kannst jeden Thread eine Message mit dem aktuellen Stand des Kopiervorgangs schicken lassen. Gruß K-H |
AW: Dateien performant mit Callback kopieren
Zitat:
Zitat:
Meine Erfahrungen mit selbst gezüchteten Kopiertechniken:
Sinnvolle Anzeigen für GUI:
Sinnvolle non-Visual Dinge:
|
AW: Dateien performant mit Callback kopieren
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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