![]() |
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^^ |
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:
Das gleiche gilt für die Ausgabe mit Rewrite() und BlockWrite().
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; marabu |
Re: Bedeutung von "RecSize" und der Größe des &
Zitat:
Zitat:
|
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 |
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^^ |
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 |
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