Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Virtuelles Dateisystem schreiben? (https://www.delphipraxis.net/64076-virtuelles-dateisystem-schreiben.html)

sh17 27. Feb 2006 06:22


Virtuelles Dateisystem schreiben?
 
Hallo,

ich such gerade nach einer guten Lösung, um ein Verzeichnis mit seinen Dateien und Unterordnern komfortabel in einer einzigen Datei zu verwalten, also wie ein eigenes Dateisystem zu verwenden.

Nun stellt sich mir die Frage: - selber schreiben, - kaufen, - gibts kostenlos?

Hat schon jemand Erfahrung mit sowas? Welche kniffligen Ecken gibt es an der ganzen Sache, die mich eher zum Kaufen einer Komponente drängen würden, als jetzt alles selbst zu kodieren.

Danke,
Sven

alzaimar 27. Feb 2006 07:02

Re: Virtuelles Dateisystem schreiben?
 
Schau mal unter 'Structured Storage' bei Microsoft rein. Ich hab nur davon gehört, weiss also nicht, wie das abläuft, aber Anregungen bekommst Du auf jeden Fall.

Ich musste mal so etwas für ein Datenbanksystem machen: Als erstes habe ich eine Klasse geschrieben, die 8kb Seiten (also die 'Sektoren') verwaltet, mit Seitencache, Seitenalloziierung und Freispeicherverwaltung etc. Darauf eine Klasse, die Streams lesen und schreiben kann, und zwar auf diesen Seiten aufbauend. Jede Seite enthält zunächst einen Verweis auf die nächste Seite, die 1.Seite zusätzlich noch die Größe des Streams in Bytes. Du kannst es natürlich anders machen (z.B. so wie Unix).

Damit wäre der Unterbau fertig: Wie dein Dateisystem angelegt ist (Order? Unterordner? etc.), bleibt Dir überlassen. Du musst die TDirectory und TDirectoryEntry-Klassen nur serialisierbar gestalten (z.B. von TPersistent ableiten).

Bernhard Geyer 27. Feb 2006 07:06

Re: Virtuelles Dateisystem schreiben?
 
Zitat:

Zitat von sh17
Nun stellt sich mir die Frage: - selber schreiben, - kaufen, - gibts kostenlos?

Schau dir mal Solid File System an

Zitat:

Zitat von sh17
Welche kniffligen Ecken gibt es an der ganzen Sache, die mich eher zum Kaufen einer Komponente drängen würden, als jetzt alles selbst zu kodieren.

Schau dir einfach mal die Features an und überleg dir wie lange Du selbst benötigen würdest.

choose 27. Feb 2006 07:43

Re: Virtuelles Dateisystem schreiben?
 
Hallo Bernhard,

seitzt Du SolFS in Deinen Projekten ein? Ist es mit dieser Technik möglich, transparent mit Dateien aus dem Archiv zu arbeiten und so zB DLLs nachladen zu lassen?

Bernhard Geyer 27. Feb 2006 07:52

Re: Virtuelles Dateisystem schreiben?
 
Zitat:

Zitat von choose
seitzt Du SolFS in Deinen Projekten ein? Ist es mit dieser Technik möglich, transparent mit Dateien aus dem Archiv zu arbeiten und so zB DLLs nachladen zu lassen?

Ich setze es nicht ein (hätte doch im ersten Post darauf hinweisen sollen). Bei der Entscheidung eine Verschlüsselung ins eigene Projekt zu integrieren war SFS auch im Gespräch, aber dies haben wird letzendlich auf Einzeldateiverschlüsselung realisiert da wir auch eine Updatemechanismus benötigten um auch einzelne Dateien auszutauschen und da war eine "Virtuelles Dateisytem" nicht so praktisch.

sh17 27. Feb 2006 09:18

Re: Virtuelles Dateisystem schreiben?
 
Zitat:

Zitat von Bernhard Geyer
Schau dir mal Solid File System an

Sieht in jedem Fall interessant aus. sogar gleich für .Net und CF.

Wenn ich mir den Preis in Entwicklungszeit umrechne, bin ich für kaufen.

Ich werds mal testen.

Danke an alle.

SirThornberry 27. Feb 2006 09:29

Re: Virtuelles Dateisystem schreiben?
 
ich hab vor einiger zeit mal sowas geproggt. Kannst dir ja mal anschauen ob es was für dich ist. Da das ganze entstanden ist wo ich noch nicht so viel Ahnung hatte gibts da bestimmt noch paar Dinge die Verbesserungswürdig sind, aber vielleicht reicht dir das was geht aus.
http://www.delphipraxis.net/internal...=208456#208456

Hador 27. Feb 2006 10:05

Re: Virtuelles Dateisystem schreiben?
 
Du könntest doch auch alle Daten in ein Archive pachen.
Evtl. kannst du dir ja mal
- TJvCABFile
- TJvZlibMultiple
von den Jedis anschauen.

Ich hab sie zwar selbst noch nicht getestet, aber die müssten die Verzeichnisstruktur mitspeichern..

Ob sich das für dich eignet must du selbst sehen. Aber bei kleineren Datenmengen könnte es meiner Meinung nach eine Alternative sein.

sh17 27. Feb 2006 10:20

Re: Virtuelles Dateisystem schreiben?
 
Ich hatte mir schon mal was auf Basis von TAR gebaut.

Allerdings ist das Problem, das immer alles ausgepackt und eingepackt werden muss, wenn sich eine Datei ändert. Man kann das ganze zwar noch mal kapseln, aber das ist mir nicht sauber genug.

Vom richtigen Packen (zip,cab) würde ich abraten, denn ist das Archiv defekt, ist meist alles verloren.

SirThornberry 27. Feb 2006 10:34

Re: Virtuelles Dateisystem schreiben?
 
bei dem von mir geposteten gibt es wenn ich mich recht entsinne die option das auf einem stream laufen zu lassen. Es wird also ein Filestream geöffnet und auf diesem live gearbeitet.

sh17 27. Feb 2006 10:48

Re: Virtuelles Dateisystem schreiben?
 
Zitat:

Zitat von SirThornberry
bei dem von mir geposteten gibt es wenn ich mich recht entsinne die option das auf einem stream laufen zu lassen. Es wird also ein Filestream geöffnet und auf diesem live gearbeitet.

habs schon runtergeladen, steht in meiner Beguckliste

SirThornberry 27. Feb 2006 10:50

Re: Virtuelles Dateisystem schreiben?
 
wenn fragen oder anregungen dazu noch sind, sag einfach bescheid.

sh17 27. Feb 2006 21:42

Re: Virtuelles Dateisystem schreiben?
 
Für alle, die es noch interessiert, hab mir mal das Structured Storage Format von MS angeschaut, welches eigentlich recht optimal ist.

Delphi-Wrapper gibts hier:

Zukunftssicher ist es auch:

Compound Documents in WinFX

ConstantGardener 28. Feb 2006 08:30

Re: Virtuelles Dateisystem schreiben?
 
Hallo zusammen,

möchte hier mal eine Lanze für das .zip Format brechen. Wir verwenden DynaZip um komplette Datenbanken, Lockdateien, JPG und .INI's in einem Pfad als leicht portable und gut zu sichernde Datei zu speichern. Der Anwender hat das Gefühl nur mit einer Datei zu arbeiten mit der er umgehen kann wie mit einem Word-Doc. Die Arbeit im Hintergrund halten wir damit vom Anwender fern. Auch das versenden per Mail ist so recht einfach für die werte Kundschaft. Und wen das .zip stört nennt seine Datei einfach um (z.B. in .BLA) um Manipulationen durch den Anwender aus dem Weg zu gehen. Per Verschlüsselung des Files kann man auch dem Datenschutz zumindest etwas Rechnung tragen.

Also wir sind mit dieser Lösung ganz zufrieden. Und zukunftssicher ist ZIP sicher auch.

SirThornberry 28. Feb 2006 09:24

Re: Virtuelles Dateisystem schreiben?
 
@ConstantGardener: An zip hat ihn glaub ich gestört das bei Änderungen das ganze Archiv neu gepackt werden muss (ich weiß nicht ob dem wirklich so ist aber das war seine Befürchtung)

sh17 28. Feb 2006 09:39

Re: Virtuelles Dateisystem schreiben?
 
und wenn es kaputt ist, ist es kaputt. man müsste dann schon die Kompressionsfunktion ausschalten.

ConstantGardener 1. Mär 2006 20:39

Re: Virtuelles Dateisystem schreiben?
 
Ist natürlich ein Argument mit dem zerstörten Archiv. Ist bei uns zwar noch nie vorgekommen aber natürlich möglich. Wir erstellen vor dem speichern der Datei immer ne Backupdatei zur Sicherheit.

Ich weiß nicht was und wieviel (bei uns zwischen 300-800 KB gepackt) gespeichert werden muß, unsere Lösung ist aber recht performant und für unsere Zwecke völlig ausreichend.

Jens Schumann 2. Mär 2006 07:03

Re: Virtuelles Dateisystem schreiben?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
komme gerade aus meinem Archiv und habe ein kleines Beispiel für das Structured Storage Interface mitgebracht.
Zuerst auf Create DOCFile klicken und dann auf Enum. Die dann angezeigten Streams mit den Namen MyData1 bis
MyData4 entsprechen 4 Dateien in einer Datei. Eigentlich ist das Structured Storage Interface ziemlich simpel.
Ich glaube nicht, dass man für einen Wrapper Geld ausgeben sollte. Das Interface ist in der Win32 Referenz, die mit Delphi ausgeliefert wird dokumentiert.

P.S.
In Kombination mit TOleStream und der dpCollection kann man wahre Wunder vollbringen.
Leider habe ich hier kein passendes Beispiel parat.

Die Muhkuh 2. Mär 2006 07:28

Re: Virtuelles Dateisystem schreiben?
 
Hallo Jens,

könntest du die Datei Utils1.pas noch hinzufügen, da diese nicht im Zip-File ist, aber zum compilieren benötigt wird.

Jens Schumann 2. Mär 2006 07:30

Re: Virtuelles Dateisystem schreiben?
 
Zitat:

Zitat von Spider
Hallo Jens,

könntest du die Datei Utils1.pas noch hinzufügen, da diese nicht im Zip-File ist, aber zum compilieren benötigt wird.

Aus der Datei wird nur die Variable ApplicationPath geholt. Die Variable enthält den Anwendungspfad. Kanst Du leicht
Durch ApplicationPath:=ExtractFilePath(Application.Exena me) ersetzten.

Die Muhkuh 2. Mär 2006 07:32

Re: Virtuelles Dateisystem schreiben?
 
Zitat:

Zitat von Jens Schumann
Zitat:

Zitat von Spider
Hallo Jens,

könntest du die Datei Utils1.pas noch hinzufügen, da diese nicht im Zip-File ist, aber zum compilieren benötigt wird.

Aus der Datei wird nur die Variable ApplicationPath geholt. Die Variable enthält den Anwendungspfad. Kanst Du leicht
Durch ApplicationPath:=ExtractFilePath(Application.Exena me) ersetzten.

Achso :mrgreen: , dachte, da ist noch mehr drinne :D

nixPepe 2. Mär 2006 20:26

Re: Virtuelles Dateisystem schreiben?
 
ich hab auch schon überlegt etwas ähnliches zu programmieren, allerdings mit anbindung an eine datenbank (hier mysql) um das datei system da drin zu speichern, hierzu sollte auch in virtuelles laufwerk erstellt werden, über das man die daten auslesen kann, hat einer einen ansatz hierfür?

MfG
Pepe

mimi 22. Sep 2007 17:54

Re: Virtuelles Dateisystem schreiben?
 
Ist zwar lange her der letzte Beitrag aber sowas finde ich immer Interessant weil habe selber schon mind. drei mal versucht sowas zu schreiben, das Hinzufügen, Löschen, Updaten, einer Datei habe ich ja immer schnell geschaft.

Aber ich wollte ja auch noch das einzelne Blöcke komprimiert werden können - damlas mit bzip2 und sie sollten auch noch verschllüsselt werden können. Da habe ich dann immer aufgeben, weil das ganze zu komplex war/ist.

Ich bin immer auf ein Kern-Problem gestoßen: Das Speichern der Daten. Das lesen ist relativ einfach, aber wie soll ich eine große Daten Menge speichern ? z.b. eine 20 GB oder TB Datei ?
Immer alles neu zu erstellen würde ich sagen geht nicht, weil es einfach zu lange dauert.

Vor einiger Zeit ist mit einer Idee gekommen wie das ganze relativ einfach gehen würde.
Man müsste es so abspeichern wie eine Doppelt Verkette Liste Funktioniert:

Wenn die Datei leer ist wird als erstes eine Index-Tabelle Angelegt.
mit einer Festen Größe z..b. 20 Einträge.

Sind die voll steht im Letzten Eintrag drin wo es weiter gehen soll.

Ich lege jetzt eine Tabelle an und ordne der Tabelle Datensatzte zu.
Hier genau das gleiche: Eine Tabelle sollte Speicher im voraus resavieren z.b. für 20 Datenstätze.

Ich hoffe ihr versteht wo ich hinaus möchte. Beim Löschen wird einfach nur noch die vorhanden Daten mit verschiedenen Zahlen überschrieben und z.b. mit 0 und der Platzt wird freigeben.

Ich bin sicher das es auf dieser Art und weise auch richtige DB'S tuen und das sich dieser art und weise irgendwie auf ein Virtaules Dateisystem anwenden lässt.

Ich habe mir auch einige Gedanken gemacht wie das ganze als Klassen aussehen sollte.
und da habe ich meine Probleme.

Ich bekomme keine passende Klassen Struktur zusammen

Ich dachte eine Klasse für den Direkten Datei zu Grief.
und da fängt es schon an:
Dann eine Procedure für das Schreiben eines Feldes.
Also das Speicher im Vorraus bereit gehalten wird.

und ich bin mir noch nicht sicher ob ich mit Zeilen rechnen sollte oder mit echten Positions Angaben.

Bis jetzt habe ich es noch nicht wieder versucht. Weil mir noch nicht der Weg klar ist.
Ich hoffe ihr könnt es nach vollziehen wo die Probleme liegen: Es liegt nur an der Klassen-Struktur.
Wie es dann weiter geht weiß ich schon: TFileStream z.b.

Dezipaitor 23. Sep 2007 17:39

Re: Virtuelles Dateisystem schreiben?
 
guck mal hier.

mimi 23. Sep 2007 19:00

Re: Virtuelles Dateisystem schreiben?
 
Danke ! ist leider auf englisch, aber ich werde es mir mal anschauen.... ob ich da neue Ideen bekomme !

phXql 23. Sep 2007 19:41

Re: Virtuelles Dateisystem schreiben?
 
Ha, ich hab gestern schnell (naja, 2 - 3h) son Ding geschrieben. Is allerdings in C#, aber ohne viele Tricksereien, also kann man denke ich ohne Probleme nach Delphi portieren. Wenn Interesse besteht, pack ichs hier rein.
Kann allerdings nur Schreiben, Lesen und Dateien extrahieren, nix mit Updates, Fragmentierung und so Späße.

phXql

mimi 23. Sep 2007 20:27

Re: Virtuelles Dateisystem schreiben?
 
Naja die spande sache ist wie gesagt das schreiben: Erstellt die Datei immer wieder neu ?
Wenn ja ist es nicht besonders Interessant(für mich auf jedenfalls) wenn nein dann her damit....

phXql 23. Sep 2007 21:36

Re: Virtuelles Dateisystem schreiben?
 
Ja, die Datei wird immer wieder neu erstellt.

mimi 23. Sep 2007 21:40

Re: Virtuelles Dateisystem schreiben?
 
Dann stelle dir mal vor, das machst du bei einer 10 TB Großen Datei.....

Währe das umgedingt Praktisch ?

phXql 23. Sep 2007 21:41

Re: Virtuelles Dateisystem schreiben?
 
Nö, aber da das Ding nur ne Fingerübung war und ich bisher noch keinen Verwendungszweck für gefunden habe, macht mir das auch nicht sonderlich viel aus :)

mimi 23. Sep 2007 21:46

Re: Virtuelles Dateisystem schreiben?
 
naja für kleine Projekte währe das bestimmt Praktisch z.b. um alle Dateien die zum Projekt gehören beisammen zu haben. z.b. für ein Spiel oder so.

DGL-luke 23. Sep 2007 22:00

Re: Virtuelles Dateisystem schreiben?
 
In dem Fall kann man ja 2 VFS erstellen - eines read-only für Spieldaten, und eines mit random access für alles was sich ändern kann.

mimi 23. Sep 2007 22:27

Re: Virtuelles Dateisystem schreiben?
 
Währe doch mal eine nette Idee.... ich plane z.z. ein Projekt um mehrer Grafiken in einer Datei zu bekommen in einem Archiv.... bzw. das plane ich schon länger....


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