Zip aus Ressourcen entpacken

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Torenjk.

    Zip aus Ressourcen entpacken

    Tach Leute,

    ich benutze atm die Source vom mikeb69 die ja hier whs ziemlich bekannt ist ^^
    Nur will ich hald ne ZIP datei aus den Ressourcen entpacken und nicht vom Desktop, leider bekomm ich das ned hin :(

    Visual Basic-Quellcode

    1. ' Using ofd As New OpenFileDialog
    2. ' ofd.Filter = "ZipFile|*.zip"
    3. 'If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
    4. Dim cu2 As New Class1(My.Resources.test, My.Computer.FileSystem.SpecialDirectories.Desktop)
    5. AddHandler cu2.UnzipFinishd, AddressOf Unziped
    6. cu2.UnzipNow()
    7. ' End If
    8. ' End Using


    Bekomm nur immer den Error:
    Fehler 1 Der Wert vom Typ "1-dimensionales Array von Byte" kann nicht in "String" konvertiert werden.
    Er markiert mir auch

    Visual Basic-Quellcode

    1. ​(My.Resources.test,


    was mach ich falsch?
    Moin!

    Ganz einfach: Die Klasse zum unzippen erwartet einen String (wohl einen Pfad) und du gibst ihm deine ZIP in binärer Form direkt aus deinen Ressourcen.
    Das ist nicht dasselbe!
    Du könntest die Daten (die ZIP aus den Ressourcen) auch zuerst auf der Festplatte speichern (siehe System.IO.BinaryWriter) und nachher der Klasse zum unzippen den Pfad zur gespeicherten Datei geben (nach dem unzippen vielleicht auch die Datei löschen).
    Oder du schreibst die Klasse ab. Irgendwo wird die gewiss auch die Datei byteweise einlesen. An der Stelle könntest du deine ZIP aus den Ressourcen direkt als Byte-Array einfüttern ;).

    Konnte ich dir damit helfen?

    MfG,
    X-Zat / Mo
    Ich hab' mir mal die entsprechende Klasse von Mike angeschaut.

    Und da ich im Netz nirgends einen Hinweis darauf finde, was das Shell-Objekt neben den von Mike implementierten Methoden für Zips noch anzubieten hat, würde ich einfach eine Alternative ausprobieren. Ich selbst nutze zum Beispiel recht häufig die Library "Ionic.Zip". Die ist einfach zu benutzen und sollte komplett ausreichen. Du könntest auch darüber nachdenken, diese Lib in dein Programm mit einzukompilieren.
    Wenn dir das nicht zusagt, müsstest du vielleicht selbst nochmal Google nach weiteren Methoden für Shell-Objekte (mit dem IShellDispatch2-Interface) durchforsten...

    MfG,
    X-Zat / Mo
    Dafür kannst du das Tool "ILMerge" nutzen - Soweit ich weiß komplett kostenlos und von Microsoft.
    Online findest du dazu einen Haufen Anleitungen, wie du das Tool dann letztendlich nutzen kannst. Da es aus einem Konsolen-Programm besteht, musst du dieses mit Parametern ansprechen.
    Syntax:

    Quellcode

    1. ilmerge /out:<output> <inputprogram> <inputlibrary>

    Beispiel für ein Batch-Script:

    Quellcode

    1. "%verzeichnisILMerge%\ilmerge.exe" /out:"%verzeichnisAusgabe%\%dateiAusgabe%" "%verzeichnisEingabe%\%dateiEingabe%" "%verzeichnisDLL%\%dateiDLL%"

    oder noch vereinfacht

    Quellcode

    1. "%verzeichnisILMerge%\ilmerge.exe" /out:"%dateiAusgabePfad%" "%dateiEingabePfad%" "%dateiDLLPfad%"

    Natürlich musst du für ein Batch-Script vorher den entsprechenden Variablen einen Wert zuweisen ;).

    Achtung: Wann immer du eine Library einkompilieren möchtest, erkundige dich zuerst, ob der Anbieter/Autor dieser Library damit einverstanden ist und ggf. im Programm genannt werden möchte. Bedenke, dass der 08/15-User in der Regel später nicht auf Anhieb erkennen kann, ob und wenn ja welche Librarys dein Programm einbindet!

    MfG,
    X-Zat / Mo