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
Antwort Antwort
Seite 1 von 2  1 2      
Kharlanki

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

Dateien auf USB-Stick kopieren

  Alt 31. Okt 2009, 22: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
Benutzerbild von Luckie
Luckie

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

Re: Dateien auf USB-Stick kopieren

  Alt 31. Okt 2009, 22:46
Guck dir mal MSDN-Library durchsuchenCopyFileEx an: http://www.michael-puff.de/Developer...pyFileEx.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Dateien auf USB-Stick kopieren

  Alt 31. Okt 2009, 22:50
Schau dir bitte mal CopyFileEx() an

Code:
BOOL CopyFileEx(
  LPCTSTR lpExistingFileName,
  LPCTSTR lpNewFileName,
  LPPROGRESS_ROUTINE lpProgressRoutine,
  LPVOID lpData,
  LPBOOL pbCancel,
  DWORD dwCopyFlags
);
Implementiere einfach eine Funktion die du als lpProgressRoutine-Parameter übergibts!

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Dateien auf USB-Stick kopieren

  Alt 31. Okt 2009, 22:56
Was deine Zeitmessungen angeht: Das kannst du nicht vergleichen, weil Windows die Zugriffe cached.

@Aphton: Zu langsam.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Dateien auf USB-Stick kopieren

  Alt 31. Okt 2009, 23:03
und vorallem:
wie hast du diese Zeiten gemessen?

Lesen:
- nach dem ersten Einlesen ist sie schonmal in der WindowsFileCache geladen und muß danach nicht nochmal von der platte geladen werden

Speichern: wird die WindowsFileCache mitgemessen oder nicht?
- ja: dann dauert es länger, da hier bis da, wo die Daten wirklich auf dem Stick sind, gemessen wird
- nein: in der Cache sind sie schnell, aber dann sind sie noch malne nicht "sicher" auf dem Stick.

das NEIN ist dir bestimmt schonmal aufgefallen.
- datei speichern = ratz fatz fertig (angeblich)
- und dann blinkt der Stick noch ewig ... wärend Windows im Hintergrund die Daten endlich schreibt

[edit]
och menno
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Kharlanki

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

Re: Dateien auf USB-Stick kopieren

  Alt 1. Nov 2009, 17:19
Danke fuer den Hinweis auf CopyFileEx!

Aber woran liegt es denn, dass die Varianten 1 und 2 dermassen langsam sind? Weit unterhalb der Uebertragungsgeschwindigkeit von USB. Und so schlecht kann mein Asia-MP3-Player nicht sein.

Wenn CopyFile von Windows gecached wird... Kann ich mir denn sicher sein, dass die Files wenigstens in der Reihenfolge aus dem Cache auf den Stick kopiert werden, in der sie in den Cache kamen?

Mein Asia-MP3-Player listet die Dateien leider in der Reihenfolge auf, in der sie rueber kopiert wurden. Wenn ich per Explorer mehrere Dateien rueberziehe, stimmt also die Trackreihenfolge nicht mehr. Dafuer muesste ich die Dateien schon einzeln rueberziehen. Mein Tool soll mir hier die Arbeit abnehmen.
Gruss,
Matthias

  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

Re: Dateien auf USB-Stick kopieren

  Alt 1. Nov 2009, 17:31
Zitat von Kharlanki:
Mein Asia-MP3-Player listet die Dateien leider in der Reihenfolge auf, in der sie rueber kopiert wurden. Wenn ich per Explorer mehrere Dateien rueberziehe, stimmt also die Trackreihenfolge nicht mehr. Dafuer muesste ich die Dateien schon einzeln rueberziehen. Mein Tool soll mir hier die Arbeit abnehmen.
Sei mir nicht böse, aber das klingt nach suboptimalem Design. Für so etwas erstellt man sich doch Playlists oder sortiert die Tracks nach Namen etc.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kharlanki

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

Re: Dateien auf USB-Stick kopieren

  Alt 1. Nov 2009, 17:36
Zitat von DeddyH:
Sei mir nicht böse, aber das klingt nach suboptimalem Design.
Dafuer war er billig... Ausserdem hab ich so was zum Basteln...
Gruss,
Matthias

  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#9

Re: Dateien auf USB-Stick kopieren

  Alt 1. Nov 2009, 17:38
Ach, das ist ein gekauftes Programm? Ich dachte, das hättest Du selbst geschrieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kharlanki

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

Re: Dateien auf USB-Stick kopieren

  Alt 1. Nov 2009, 17:42
Zitat von DeddyH:
Ach, das ist ein gekauftes Programm? Ich dachte, das hättest Du selbst geschrieben.
Aeh, wie jetzt?

Ich habe mir nen guenstigen MP3-Player gekauft, den ich immer dateiweise befuellen muss, da er die Dateien in der Reihenfolge auflistet, in der sie auf den Player kopiert wurden. Da das bei einem Hoerbuch suboptimal ist, will ich mir ein Transfertool schreiben, dass mir eine Queue in der richtigen Reihenfolge nacheinander auf den Player schiebt.
Gruss,
Matthias

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:49 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