Hi,
ich arbeite derzeit an einem Virtuellen Dateisystem, in dem man über Mountpoints (einbinden von Quelldaten) und Data Handlers (Datenkonvertierung) sich den Zugriff auf Dateien vereinfachen können soll.
Die Struktur des VFS ist dabei in gewissem Sinne dem System von Unix nachempfunden, d.h. man kann sich die Daten an die Stellen legen, wo man sie hin haben möchte. Das VFS könnte daher z.B. in etwa folgende Struktur haben:
Beispiel-Datenfluss-Struktur für die Objekte im VFS:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| +------------------+ |vfs:/ (D-V) | ++-----------------+ | | +------------------+ +-|vfs:/app (D-V) | | +------------------+ | +------------------+ +-|vfs:/data (D-V) | | +------------------+ | +------------------+ +-|vfs:/mnt (D-V) | ++-----------------+ | | +------------------+ /-----------------------\ +-|vfs:/mnt/dir (D--)|<------------|win:C:/data (D--) | | ++-----------------+ \-----------------------/ | | | | +------------------------+ /-----------------------\ | +-|vfs:/mnt/dir/file1 (-F-)|<---|win:C:/data/file1 (-F-)| | | +------------------------+ \-----------------------/ | | +------------------------+ /-----------------------\ | +-|vfs:/mnt/dir/file2 (-F-)|<---|win:C:/data/file2 (-F-)| | +------------------------+ \-----------------------/ | | +------------------+ /-----------------------\ +-|vfs:/mnt/arc (D--)|<------------|win:C:/archives (D--) | ++-----------------+ \-----------------------/ | | +------------------------+ /---------------------------\ +-|vfs:/mnt/arc/a.tar (DF-)|<---|win:C:/archives/a.tar (-F-)| ++---------------------+-+ \---------------------------/ | `-------------------------------------------. | +-----------------------------+ .------------------. | +-|vfs:/mnt/arc/a.tar/\TAR (D-V)|<-----------|(tar):/ |<+ ++----------------------------+ `------------------' | | | | +----------------------------------+ .------------------. | +-|vfs:/mnt/arc/a.tar/\TAR/file (-FV)|<---|(tar):/file |<+ | +----------------------------------+ `------------------' | | +----------------------------------+ .------------------. | +-|vfs:/mnt/arc/a.tar/\TAR/dir (D-V) |<---|(tar):/dir |<+ +----------------------------------+ `------------------' |
Das System besitzt nun zwei Teile:
- Datenquellen:
Diese liefern die Daten und werden über ein Paar von Protokoll (z.B. vfs) und Resourcenname (z.B. /mnt/dir/file1) angesprochen.
- Datenkonverter:
Diese wandeln die Daten eines Quellobjektes (z.B. vfs:/mnt/arc/a.tar) in entweder einen anderen Datenstrom um (z.B. dekomprimieren, entschlüsseln) und\oder Stellen die Datenquelle als "virtuelle" Teildaten (z.B. Dateien in einer Archiv-Datei) dar.
Nun bin ich inzwischen soweit, dass ich ohne Probleme den ersten Teil realisiert hab (d.h. ich kann problemlos Dateien von Platte oder anderen Quellen lesen), komme aber derzeit bei dem zweiten Punkt nicht wirklich weiter, da ich denke, dass sich in meinem jetzigen Source ein Struktur-Fehler eingeschlichen hat.
Wer den aktuellen Source brauch, findet diesen
hier in den Dateien mit OVFS*.pas am Anfang des Namens (insbesondere OVFSManager.pas, OVFSDataSrc*.pas und OVFSProtocol*.pas).
Meine Frage wär nun, wie ich am einfachsten die Behandlung von z.B. Archiv-Dateien realisieren kann, UND ob es ggf. möglich ist, die Schnittstellen für Datenquellen und Datenkonverter zusammenzulegen?
TIA,
BenBE.
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.