![]() |
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 |
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). |
Re: Virtuelles Dateisystem schreiben?
Zitat:
![]() Zitat:
![]() |
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? |
Re: Virtuelles Dateisystem schreiben?
Zitat:
|
Re: Virtuelles Dateisystem schreiben?
Zitat:
Wenn ich mir den Preis in Entwicklungszeit umrechne, bin ich für kaufen. Ich werds mal testen. Danke an alle. |
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.
![]() |
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. |
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. |
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.
|
Re: Virtuelles Dateisystem schreiben?
Zitat:
|
Re: Virtuelles Dateisystem schreiben?
wenn fragen oder anregungen dazu noch sind, sag einfach bescheid.
|
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 ![]() Zukunftssicher ist es auch: ![]() |
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. |
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)
|
Re: Virtuelles Dateisystem schreiben?
und wenn es kaputt ist, ist es kaputt. man müsste dann schon die Kompressionsfunktion ausschalten.
|
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. |
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. |
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. |
Re: Virtuelles Dateisystem schreiben?
Zitat:
Durch ApplicationPath:=ExtractFilePath(Application.Exena me) ersetzten. |
Re: Virtuelles Dateisystem schreiben?
Zitat:
|
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 |
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. |
Re: Virtuelles Dateisystem schreiben?
guck mal
![]() |
Re: Virtuelles Dateisystem schreiben?
Danke ! ist leider auf englisch, aber ich werde es mir mal anschauen.... ob ich da neue Ideen bekomme !
|
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 |
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.... |
Re: Virtuelles Dateisystem schreiben?
Ja, die Datei wird immer wieder neu erstellt.
|
Re: Virtuelles Dateisystem schreiben?
Dann stelle dir mal vor, das machst du bei einer 10 TB Großen Datei.....
Währe das umgedingt Praktisch ? |
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 :)
|
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.
|
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.
|
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