ZipLib von ICSharp

11/08/2009 - 08:58 von Maximilian Tescher | Report spam
Hallo,

in meinem Projekt öffne ich XML-Dateien und kann diese mittlerweile
recht gut bearbeiten und wieder speichern, das klappt nun so wie ich
es brauche schon ganz gut.

Jetzt stellt sich mir eine neue Herausfforderung, ich habe XML-Dateien
die verschlüsselt in einem ZIP-File abgelegt sind. Das Passwort ist
kein Problem, dass kenne ich, nur die Vorgabe solche Dateien nicht zu
entpacken macht mir Probleme.

Kurzum, es liegt eine "test.xml" in einem "account.zip". Die Zip kann
ich mit Passwort öffnen und könnte die Datei auch auf die HDD
speichern, aber das darf nun leider nicht sein.

Jetzt hoffe ich das mir jemand mit ZipLib helfen kann bzw eher mit dem
handling des Stream, denn ZipFile und ZipInputStream liefern einen
system.io.stream den ich so nicht direkt verwenden kann.

Ich habe mal den Stream in einen MemoryStream eingelesen und dann
ASCIIEncoding.getstring(.).toarray nach debug.print ausgegeben und
konnte so tatsàchlich den Inhalt des XML-File sehen, aber mit
XDocument.load() kann ich das ganze natürlich nicht einlesen.

Wàre es möglich über einen anderen Weg oder konvertierung das ganze
von einem Stream aufzubereiten und an ein XDocument zu übergeben?

Ist ein solcher Weg dann wieder umkehrbar wenn Änderungen durchgeführt
werden diese dann wieder in das XML-File des ZIP-File zu bekommen?

Das ganze hat jetzt eine grössere Dimension für mich angenommen :-)

Wie kann ich vorgehen um ein XML-File aus einem ZIP-File zu öffnen und
wieder zu speichern ohne es auf die Platte entpacken zu müssen?


Kurz gefragt:
Da ich ein Zip-File ja auch so öffnen kann und nach Eingabe des
Passwort das XML-File in einem Editor öffnen, bearbeiten und speichern
kann, geht das dann nicht auch programmtechnisch?


Wàre Euch wirklich dankbar für Infos, dies ist noch meine letzte Hürde
im aktuellen Projekt.


Viele Grüsse,
Maxi
 

Lesen sie die antworten

#1 Marcel Garaventa
11/08/2009 - 11:54 | Warnen spam
Hallo Maximilian

Ich hatte zum Teil ein ànliches Problem. Ich wollte über Pipe eine Meldung
senden im XML-Format. Ich denke mit dieser Hilfe kannst Du ein Teil Deies
Problem lösen. Allerdings funktioniert diese Lösung nur mit .NET Framework
3.5.

Als Erstes musst Du irgendo Deine XML-Datei definieren:
Dim myXDocument As System.Xml.Linq.XDocument = _
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--^^Kommunikationsprozess^^-->
<Daten>
<Meldung_1></Meldung_1>
<Meldung_2></Meldung_2>
<Meldung_3></Meldung_3>
</Daten>

Nach dem Lesen über Stream solltest Du sowas àhnliches wie ein ganz langer
String haben. Diesen String kannst Du nach XML konvertieren wie folgt:
myXDocument = System.Xml.Linq.XDocument.Parse(sText)

Wie genau Du mit Strem lesen musst, weiss ich nicht. Ich weiss nur, ZipLib
liefert auch Beispiele dazu. Ein Beispiel ist auch mit Strem dabei. Ich
entpacke die Dateien in ein temporàres Verzeichnis welches mir das Programm
generiert, welches ich danach wieder lösche. Aber bei uns gibt es auch keine
Weisung, dass dies nicht geschehen darf.

Ich denke, aber wenn Du den Inhalt der Zip-Datei hast, solltest Du mein
Beispiel anwenden können.

Gruss Marcel.

"Maximilian Tescher" wrote:

Hallo,

in meinem Projekt öffne ich XML-Dateien und kann diese mittlerweile
recht gut bearbeiten und wieder speichern, das klappt nun so wie ich
es brauche schon ganz gut.

Jetzt stellt sich mir eine neue Herausfforderung, ich habe XML-Dateien
die verschlüsselt in einem ZIP-File abgelegt sind. Das Passwort ist
kein Problem, dass kenne ich, nur die Vorgabe solche Dateien nicht zu
entpacken macht mir Probleme.

Kurzum, es liegt eine "test.xml" in einem "account.zip". Die Zip kann
ich mit Passwort öffnen und könnte die Datei auch auf die HDD
speichern, aber das darf nun leider nicht sein.

Jetzt hoffe ich das mir jemand mit ZipLib helfen kann bzw eher mit dem
handling des Stream, denn ZipFile und ZipInputStream liefern einen
system.io.stream den ich so nicht direkt verwenden kann.

Ich habe mal den Stream in einen MemoryStream eingelesen und dann
ASCIIEncoding.getstring(.).toarray nach debug.print ausgegeben und
konnte so tatsàchlich den Inhalt des XML-File sehen, aber mit
XDocument.load() kann ich das ganze natürlich nicht einlesen.

Wàre es möglich über einen anderen Weg oder konvertierung das ganze
von einem Stream aufzubereiten und an ein XDocument zu übergeben?

Ist ein solcher Weg dann wieder umkehrbar wenn Änderungen durchgeführt
werden diese dann wieder in das XML-File des ZIP-File zu bekommen?

Das ganze hat jetzt eine grössere Dimension für mich angenommen :-)

Wie kann ich vorgehen um ein XML-File aus einem ZIP-File zu öffnen und
wieder zu speichern ohne es auf die Platte entpacken zu müssen?


Kurz gefragt:
Da ich ein Zip-File ja auch so öffnen kann und nach Eingabe des
Passwort das XML-File in einem Editor öffnen, bearbeiten und speichern
kann, geht das dann nicht auch programmtechnisch?


Wàre Euch wirklich dankbar für Infos, dies ist noch meine letzte Hürde
im aktuellen Projekt.


Viele Grüsse,
Maxi

Ähnliche fragen