Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bedeutung von "RecSize" und der Größe des "array of Byt (https://www.delphipraxis.net/49439-bedeutung-von-recsize-und-der-groesse-des-array-byt.html)

Nogge 11. Jul 2005 14:00


Bedeutung von "RecSize" und der Größe des "ar
 
Hallo Community,
Ich habe mich ja schon durch die Delphi-Hilfe gelesen und im Forum gesucht, doch eine einleuchtende Erklärung, wie die RecSize (von Reset und ReWrite) und die Größe des array of Byte zusammenspielen, habe ich nicht verstanden. Hat jemand die Zeit, mir eine kurze Nachhilfe in Reset, ReWrite, BlockRead und BlockWrite zu geben?^^

Wäre euch zu tiefstem Dank verpflichtet^^

marabu 11. Jul 2005 14:42

Re: Bedeutung von "RecSize" und der Größe des &quo
 
Wir reden hier über untypisierte Dateien. Du gibst beim Reset als zweiten Parameter noch eine BlockSize an - die Anzahl Bytes, die von BlockRead() als ein Block angesehen wird. Vielleicht wird es so klarer:

Delphi-Quellcode:
const
  BlockSize = 1;     // mit BlockSize = 1 kannst du beliebige Dateien verarbeiten
  BlockCount = 1024; // Anzahl der Blöcke im Puffer
var
  Buffer: array [1..BlockSize*BlockCount] of Byte;
  iRead, iWritten: integer;
  f: file;
begin
  AssignFile(f, ParamStr(1));
  Reset(f, BlockSize);
  repeat
    BlockRead(f, Buffer, BlockCount, iRead);
    if iRead > 0 then begin
      // ...
    end;
  until iRead < BlockCount;
  CloseFile(f);
end;
Das gleiche gilt für die Ausgabe mit Rewrite() und BlockWrite().

marabu

Nogge 11. Jul 2005 16:30

Re: Bedeutung von "RecSize" und der Größe des &
 
Zitat:

BlockSize = 1; // mit BlockSize = 1 kannst du beliebige Dateien verarbeiten
Was würde denn passieren, wenn ich z.B. den Wert für BlockSize erhöhe?

Zitat:

BlockCount = 1024; // Anzahl der Blöcke im Puffer
Was ist denn in den verschiedenen Blöcken enthalten?

marabu 11. Jul 2005 16:34

Re: Bedeutung von "RecSize" und der Größe des &
 
Wenn du die BlockSize auf n setzt, dann bekommst du Lesefehler bei Dateien deren Größe nicht ein ganzzahliges Vielfaches von n ist.

In den Blöcken ist nichts enthalten, solange du nicht rein interpretierst.

marabu

Nogge 11. Jul 2005 16:50

Re: Bedeutung von "RecSize" und der Größe des &
 
Ok, vielen Dank schon mal für BlockSize.
Aber noch mal zu Buffer: array [1..BlockSize*BlockCount] of Byte;:
Wieso muss die Anzahl an Böcken solch eine "große" Zahl sein, d.h. wieso gerade die Zahl 1024 ? Außerdem, wieso wird der Buffer als ein array of BYTE deklariert und nicht Word oder Integer?
Sry für das ständige Nachhaken, aber ich möchte die Procedures nun mal komplett verstehen^^

marabu 11. Jul 2005 17:32

Re: Bedeutung von "RecSize" und der Größe des &
 
Deine Festplatte ist ein block device, Daten werden in Blöcken (Vielfache von 512 Byte) transferiert. Durch eine angemessene Größe deines Buffers sorgst du für ein ausgewogenes Verhältnis zwischen Speicherverknappung und Verwaltungsaufwand. Wenn die Daten für deine Anwendung eine bestimmte Struktur haben, dann wirst du sinnigerweise gleich mit einem typisierten file (file of TMyRecord, file of word, ...) arbeiten.

Der Basistyp Byte bietet sich dann an, wenn deine Datei keine uniforme Struktur hat. Bei einem resource file z.B. hast du in der Regel dicht gepackt Objekte unterschiedlicher Größe mit expliziter oder impliziter Größenangabe. Du liest dann die Kennung ein, leitest die Größe in Byte ab und liest dann genau die Anzahl an Bytes nach, die du gerade bestimmt hast.

Untypisierte Dateien werden heute mit Streams bearbeitet. Borland rät von der weiteren Verwendung der files ab. Files stammen vom Konzept her aus der Frühzeit der Datenverarbeitung, Streams bieten eine höhere Ebene der Abstraktion und sind sauberer implementiert.

marabu

Nogge 11. Jul 2005 17:49

Re: Bedeutung von "RecSize" und der Größe des &
 
Vielen Dank für die ausformulierte Erklärung, marabu!
Ich habe keine weiteren Fragen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 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