Hallo Leute, ich würde gerne sämtliche Resourcen meiner Anwendung in eine Datei auslagern, d. h.: Bild01.jpeg, Bild02.jpeg, Sound1.wav, Sound2.wav, Video01.avi in z. B. Application.StartupPath & "\data.dat".
Wie kann ich nun sämtliche Daten, da ja nicht alle vom Typ string sind, in einer Datei speichern und zur Laufzeit auslesen? Es ist nämlich meines erachtens ach die Grafiken, Sounds etc. eines Spiels in "Unterordnern" (images/Bild01.jpeg) abzulegen.
Ich könnte natürlich auch alles in der Projektresourcedatei speicher, allerdings würde ich gerne z. B. bei Update nur die "data.dat" ersetzen und nicht alle Assemblys dazu.
Ich hoffe ich hab mich nicht zu leienhaft ausgedrückt und ihr versteht mein Vorhaben.
Kurzer Hinweis: Ein ordentlicher Update-Algoritmus erstellt Patches, signiert diese und wendet diese dann, nach Prüfung der Signatur auf dem Client, auf das Installationsverzeichnis an. Dadurch werden idealerweise nur die Teile einer Datei ersetzt die sich auch geändert haben. Die Patch-Datei ist zudem recht klein.
Alternativ kannst du auch ein Zip verwenden: SharpZipLib
using (var fs = new FileStream(sourcePath, FileMode.Open, FileAccess.Read) using (var zf = new ZipFile(fs)) { var ze = zf.GetEntry(fileName); if (ze == null) { throw new ArgumentException(fileName, "not found in Zip"); }
Die Datei kannst du dann ja auch mit einem Passwort verschlüsseln. Und eine Zip-Datei muss ja nicht ".zip" heißen. Als Beispiel kann man hier ".docx" und ".xlsx" nennen. Wenn man die Endung einmal in ".zip" ändert kann man diese öffnen und sich ein Rudel Ordner und XML-Dateien anschauen. Sehr schöne Vorlage vom Konzept her.
Edit: Zip-Archiv-Aufbau - basierenden auf dem Kommentar von 'spicejam'
Also ich würd in dem Zip-Archiv die einzelnen Dateien speichern. Strings würd ich als XML-File abspeichern. Mit den oben geschrieben Code kannst du eine einzelne Datei aus einem Zip-Archiv lesen. Im obrigen Code ist die Unterschützung für Unterordner noch nicht drin, läßt sich aber mit 1-2 Zeilen einbauen.
Sag mal, du hast auf alles ein Antwort :-). Respekt! Das sind schonmal sehr gute Vorschläge, das mit dem "Resource-Manager" hab ich schon gelesen gehabt. Allerdings hätte ich gerne eine Datei die nicht jeder einsehen kann. Das mit der ZipLib hört sich schonmal passend für mein Vorhaben an. Meinst du ich soll, die mit dem Resource-Manager erstellte Datei mit der ZipLib in ein eigenes Archiv komprimieren? Wenn nicht, dann wüsste ich nicht wie ich einzelene Dateien in dem ZipArchiv laden/ reinschreiben könnte. Danke. Grüße.
Danke für die Blumen. Mann muss nur ein paar kreative Ideen haben und google benutzen. Das ganze kommt dann mit der Erfahrung von alleine. Hab meinen Beitrag editiert um dir eine Antwort auf deine Frage zu geben.