AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Datei kopieren mit Fortschrittsanzeige
Thema durchsuchen
Ansicht
Themen-Optionen

Datei kopieren mit Fortschrittsanzeige

Ein Thema von Matze · begonnen am 15. Feb 2004 · letzter Beitrag vom 21. Aug 2019
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Datei kopieren mit Fortschrittsanzeige

  Alt 16. Feb 2004, 09:56
Hallo Matze,

Zitat von Matze:
Das geht irgendwie nicht, was muss ich denn genau anstelle von aFlags schreiben? In sakuras Post finde ich darüber nichts.
Abgesehen vom Flags/aFlags-Problem, das Dir Chris gelöst hat, funktioniert Sakuras Lösung einwandfrei:

Delphi-Quellcode:
    ...
    end; // target not available
    fFlags := Flags // statt aFlags;
    ...
Aufruf (aus Sakuras Post)
Code:
DoFileWork(Self.Handle, FO_DELETE, strlFiles, nil, [b][color=red]FOF_ALLOWUNDO[/color][/b]);

Mögliche Parameter für Flag (aus Sakuras Post)
Zitat:
aFlags - mögliche Flags zur Verarbeitung
FOF_ALLOWUNDO - Ermöglicht eine Umkehrung der letzten Operation
FOF_FILESONLY - Verzeichnisse ignorieren
FOF_MULTIDESTFILES - aTo hat einen Eintrag für jeden Eintrag in der aFrom Liste
FOF_NOCONFIRMATION - Der User muss keine Bestätigung zum Überschreiben, etc. geben
FOF_NOERRORUI - Fehlermeldugen unterdrücken
FOF_NORECURSION - Unterverzeichnisse ignorieren
FOF_RENAMEONCOLLISION - Datei umbenennen, wenn diese bereits im Zielverzeichnis existiert (Kopie 1 von ...)
FOF_SILENT - Fortschrittsanzeige unterdrücken.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Datei kopieren mit Fortschrittsanzeige

  Alt 16. Feb 2004, 12:57
Boah, ich bin platt!

Ich staune jedesmal neu.

Vielen Dank euch allen!
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Datei kopieren mit Fortschrittsanzeige

  Alt 16. Feb 2004, 13:20
Also, sakuras Code geht schon mal.

Bei dem anderen kommt an dieser Stelle:

Assign(infile, InFileName); dieser Fehler:

Zitat:
[Fehler] Unit1.pas(475): Inkompatible Typen: 'TPersistent' und 'file'
infile ist vom Typ file
InFileName von Typ string

Was mache ich denn nun schon wieder falsch?

In der OH sind immer nur andere Beispiele zu finden.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Datei kopieren mit Fortschrittsanzeige

  Alt 16. Feb 2004, 13:25
Hi,
mach aus den ganzen Assigns mal AssignFile...

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Datei kopieren mit Fortschrittsanzeige

  Alt 16. Feb 2004, 13:27
Thx, geht!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Datei kopieren mit Fortschrittsanzeige

  Alt 16. Feb 2004, 13:35
Komisch,
bei mir geht es auch mit Assign...
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#17

AW: Datei kopieren mit Fortschrittsanzeige

  Alt 19. Aug 2019, 22:34
Der Beitrag ist zwar schon sehr alt, aber ich habe ein Problem damit und ich wundere mich, dass niemand anderes dieses Problem bemerkt:

Wenn ich Dateien mit dieser Funktion in einer Schleife kopiere, dann läuft mein Statusbalken gleichmäßig voll, verharrt dann aber relativ lange an seiner letzten Position bis er mit der nächsten Datei fortfährt. Und der Grund dafür ist die Zeile:
Code:
CloseFile(outfile)
CloseFile dauert relativ lange (nennenswert lange im Vergleich zur Gesamtdauer des Kopiervorgangs).
Das ist sehr schade, da die Funktion dadurch unbrauchbar wird.

Ich habe dann das ganze auch nochmal mit Streams geschrieben, aber ich sehe das gleiche Verhalten - nur diesmal in der Zeile:
Code:
outStream.Free; // das hier dauert sehr lange!!!
gesamter Code der Stream-Variante:

Code:
function FastFileCopy2(const InFileName, OutFileName: string; CallBack: TProgressCallBack; doneBefore: int64; total: int64; mustCancel: TBoolFunction): boolean;
const
  BufSize = 3 * 4 * 4096; { 48Kbytes gives me the best results }
var
  done, thisSize: int64;
  outStream,inStream:TFileStream;
begin
  result := false;
  if (InFileName <> OutFileName) then begin
    outStream := TFileStream.Create(OutFileName, fmCreate);
    inStream := TFileStream.Create(InFileName, fmOpenRead);
    try
      thisSize := inStream.Size;
      if total = 0 then begin
        total := thisSize;
        doneBefore := 0;
      end;
      while (inStream.Position+BufSize<=thisSize) and not mustCancel do begin
        outStream.CopyFrom(inStream,BufSize);
        CallBack(inStream.Position+doneBefore,total);
      end;
      if not MustCancel then begin
        outStream.CopyFrom(inStream,inStream.Size-inStream.Position);
        CallBack(inStream.Position+doneBefore,total);
        //FileSetDate(TFileRec(outfile).Handle, FileGetDate(TFileRec(infile).Handle));
        result := true;
      end
    finally
      outStream.Free; // das hier dauert sehr lange!!!
      inStream.Free;
    end;
  end;
end; {FastFileCopy2}
Warum ist das so? Kann ich irgendwie entgegenwirken?
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
339 Beiträge
 
Delphi 12 Athens
 
#18

AW: Datei kopieren mit Fortschrittsanzeige

  Alt 20. Aug 2019, 00:20
Windows.CopyFileEx geht auch...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#19

AW: Datei kopieren mit Fortschrittsanzeige

  Alt 20. Aug 2019, 01:07
Haben noch andere Prozesse einen Zugriff auf die Datei(en), wie zum Beispiel ein Virenscanner?

Und da andere noch nicht von dem Problem berichtet haben, scheint es üblicherweise nicht aufzutreten. Zu mal du mit dem alternativen Code ja gezeigt hast, dass es nicht an der Implementierung liegt, sondern irgend was bei dir das Schließen der Datei verzögert/blockiert.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#20

AW: Datei kopieren mit Fortschrittsanzeige

  Alt 20. Aug 2019, 01:31
Man sollte beachten, dass das Lesen von Dateien unter Umständen sehr viel schneller geht als das Schreiben, beispielsweise beim Kopieren von Daten von SSD auf HDD oder von HDD/SSD auf Netzwerk. Windows liest den Kram in den Cache so schnell es die Quelle zulässt, aber das Schließen der Datei kann logischerweise erst abgeschlossen werden, nachdem die Daten auch ans Ziel rausgeschrieben wurden.

Grüße
Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:32 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