AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien auf USB-Stick kopieren

Ein Thema von Kharlanki · begonnen am 31. Okt 2009 · letzter Beitrag vom 2. Nov 2009
 
Kharlanki

Registriert seit: 9. Jul 2003
Ort: Düsseldorf
50 Beiträge
 
#1

Dateien auf USB-Stick kopieren

  Alt 31. Okt 2009, 21:35
Ich schreib gerade ein kleines Tool, das mir u.a. Dateien auf einen USB-Stick kopiert.

Ich haette fuer den Kopiervorgang gerne eine Progressbar-Anzeige, daher moechte ich kein CopyFile() nutzen.

Jetzt habe ich hier zwei Varianten, die aber einen enorm langsamen Datendurchsatz haben:

Variante 1:
Delphi-Quellcode:
 S := TFileStream.Create( sourcefilename, fmOpenRead );
 try
   T := TFileStream.Create( targetfilename,
                            fmOpenWrite or fmCreate );
   try
     T.CopyFrom(S, S.Size ) ;
   finally
     T.Free;
   end;
 finally
   S.Free;
 end;
Variante 2:
Delphi-Quellcode:
  buffersize := 10000;
  AssignFile(f1, sourcefilename);
  AssignFile(f2, targetfilename);
{$I-}
  reset(f1,1);
  rewrite(f2,1);
{$I+}
  if IOResult<>0 then
  begin
    result := false;
    exit;
  end;
  gel := 0;
  ges := 0;
  GetMem(buffer, buffersize);
  repeat
{$I-1}
    blockread(f1, buffer^, buffersize, gel);
    blockwrite(f2, buffer^, gel, ges);
{$I+}
    fehler := IOResult;
    Application.ProcessMessages;
  until (gel=0) or (ges<>gel) or (fehler<>0);
  if fehler<>0 then
  begin
    FreeMem(buffer, buffersize);
    result := false;
    exit;
  end;
  CloseFile(f1);
  CloseFile(f2);
  FreeMem(buffer, buffersize);
Variante 3 ist CopyFile().

Eine Testdatei von 2969KB brauchte zum Kopieren auf den USB-Stick (auf die Festplatte)
Variante 1: 137,375 Sekunden = 21KB/s (140ms, 21MB/s)
Variante 2: 23,937 Sekunden = 124 KB/s (109ms, 27MB/s)
Variante 3: 3,344 Sekunden = 888 KB/s (47ms, 63MB/s)

Fuer einen direkten Kopiervorgang ueber den Explorer habe ich eine groessere Datei genommen, da ich die Zeit ja manuell stoppen musste:
41,7 MB in 20,63s = 2 MB/s (vom Loslassen der Datei bis zum Verschwinden des Fensters mit der Progressbar)


Bin jetzt verwirrt...
Was stimmt mit den Varianten 1 und 2 nicht? Warum ist CopyFile langsamer als das direkte Kopieren? Schummelt der Explorer (Schreibcache?)?

[edit=Luckie]Wir haben auch Delphi-Tags. Mfg, Luckie[/edit]
Gruss,
Matthias

  Mit Zitat antworten Zitat
 


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