AGB  ·  Datenschutz  ·  Impressum  







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

Datei byteweise einlesen

Ein Thema von CalganX · begonnen am 11. Mai 2009 · letzter Beitrag vom 13. Mai 2009
 
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#10

Re: Datei byteweise einlesen

  Alt 12. Mai 2009, 12:03
wenn die gelesene blockgröße gleich der zu lesenden Recordgröße ist, sind die beschriebenen Methoden sehr, sehr langsam. Um viele Faktoren.
Der zu verwendente Lesepuffer sollte bei heutigen Festplatten schon sehr groß sein, 64 kb ist eine angenehme Größe.
Deshalb sollte man also mit einer großen Buffersize lesen und dann müsste man noch umständlich diesen Großen Block auf mehrere Deiner Records aufteilen. Bei diesem Verfahren sollte dann zusätzlich noch die zu lesende Buffersize ein Vielfaches der zu lesenden RecordSize sein, damit es keine Überschneidungen an den Blockgrenzen geben kann, in diesem Falle wird es dann nämlich noch komplizierter.

Das alles kann man sehr einfach haben und sich das nachdenken sparen, wenn man eine Kombination aus TFilestream und TReader verwendet. TReader kann das alles schon selbst.

also quasi sowas:

Delphi-Quellcode:
const
  BufferSize = $10000; // 65536; 64 kb


function LoadFromFile(const aFileName : String) :Integer;
var
  f : TFileStream;
  r : TReader;
  i : Integer;
  myRecord : TMyRecord;
  recSize : Integer;
begin
  Result:=0;
  recSize := SizeOf(TMyRecord);
  f:=TFileStream.Create( aFilename , fmOpenRead or fmShareDenyWrite);
  try
    r:=TReader.Create(f ,BufferSize);
    try

      for i:=0 to (f.Size Div recSize) -1 do
        r.Read(myRecord , recSize );

        ... // myRecord verarbeiten

        Inc(Result);
      end;
    finally
      r.Free;
    end;
  finally
    f.Free;
  end;
end;
siehe hier nochmal auch: http://delphi.pjh2.de/articles/files/files.php
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  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 11:46 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