Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eigenes Dateiformat, Effizienz erhöhen, Denkanstöße gesucht (https://www.delphipraxis.net/75072-eigenes-dateiformat-effizienz-erhoehen-denkanstoesse-gesucht.html)

Jürgen Thomas 14. Aug 2006 09:27

Re: eigenes Dateiformat, Effizienz erhöhen, Denkanstöße gesu
 
Zitat:

Zitat von mkinzler
Man könnte aber auch die Frage stellen, warum ein eigenes Format nötig ist?

Ich hatte mir auch einmal etwas Ähnliches überlegt (Briefe, e-Mails, Faxe usw. als Ablage zu einer Adressendatei speichern), bin aber davon abgekommen. Praktischer ist (in meinem Fall), die Dateien in entsprechenden Unterverzeichnissen zu speichern und ggf. als hidden/read-only zu markieren.

Wenn Du aber wirklich selbst speichern willst, schlage ich Folgendes vor:

1. Inhalte und Header in getrennte Dateien speichern: Archiv.Dat und Archiv.Dah

2. Die Inhalte werden einfach aneinander gehängt; dann ist der Dateityp auch egal. Du wirst sowieso mit FileStream o.ä. arbeiten.

3. Die Header-Datei ist eine normale Datenbanktabelle:
3a. Ich empfehle (als NET-Entwickler) DataSet i.V.m. XML-Datei.
3b. Alternativ ist jede andere Tabellenart geeignet, möglichst eine mit Index auf die laufende Nummer (die ist als PrimaryKey immer und überall dringendst zu empfehlen) und auf den Dateinamen.
3c. Wenn die Header-Datei beim Programmstart vollständig eingelesen wird, kannst Du auch mit einer Memory-Tabelle (ich hatte früher mit den Rx-Tools RxMemTable verwendet) und einer CSV-Textdatei mit der BDE arbeiten.

4. Die Header-Datei erhält etwa folgende Struktur nach Deinen Vorstellungen:
ID, Dateiname (je nach Verwendung mit oder ohne Pfad), Dateigröße, FileDateTime

5. Mit dem Index (oder im Speicher mit einfacher Suchfunktion) holst Du Dir die ID der gewünschten Datei.

6. Der benötigte Offset berechnet sich ruckzuck:
SQL-Code:
SELECT SUM(Dateigröße) AS Offset FROM Header WHERE ID < :AktuelleID
Wenn zwischendurch Dateien gelöscht werden, muss dies natürlich angepasst werden, z.B. durch verschachteltes SELECT i.V.m. COUNT(*) o.ä.

Ich hoffe, das nützt Dir. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Seite 2 von 2     12   

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