Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#11

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

  Alt 14. Aug 2006, 09:27
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:
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
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat