[SOLVED] Unzip Prozess anzeigen

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

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    [SOLVED] Unzip Prozess anzeigen

    Hey zusammen!

    Ich möchte mal ein lange vergangenes Thema aufgreifen, welches nicht behandelt wurde und offen blieb.
    Gemeint ist das da oder auch hier.

    Kurz zusammengefasst:
    In mehreren Threads wird auf verschiedensten Wegen gezeigt, wie man in VB.net eine .zip Datei ohne externe Tools
    entpacken kann. Nun bleibt die Frage aber: Wie kann ich ohne externe Tools den Fortschritt eines solchen Prozesses
    zB in einer ProgressBar anzeigen lassen. Oder: Wie kann ich die zuletzt extrahierte Datei in einem Label anzeigen lassen?

    Falls es Threads gibt, die beantwortet wurden bitte ich mir diese zu zu senden. Hatte gerade nur diesen Thread entdeckt.
    Vielen Dank!

    Danke im Vorraus!
    LG SystemException aka Ceytec
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Hey,

    nein eben nicht. Der zweite Link führt zu diesem Thread.
    In diesem wird man aufgefordert die Funktionen aus dem Framework zu nutzen.
    Das ist zwar "eine Lösung" aber keine generelle. Man löst nicht ein Problem, indem man es mit anderen Möglichkeiten umgeht.
    Meine Frage bzht sich auf den ersten Link, unter anderem...

    Eine Variante zur Entpackung, welche ich gerne benutze ist mit Hilfe von Shell32.
    Hier im Forum häufig vertreten ist aber auch diese.
    Und nun zu meiner Frage: Ist es möglich den Fortschritt anzuzeigen OHNE dabei eine andere "Methode" zu benutzen?

    LG!
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SystemException“ ()

    Kommt darauf an wie du "Fortschritt" definierst. Wenn es dir nur darum geht anzuzeigen wie viele Dateien schon extrahiert wurden und wie viele noch übrig sind, kannst du dir einfach die Anzahl der Dateien in dem Archiv zusammenrechnen. Eine zweite Variable zählst du bei jeder extrahierten Datei hoch und kannst so den "Fortschritt" anzeigen.

    Problematisch wird das ganze nur wenn es um größere Dateien in dem Archiv geht, da siehst du dann natürlich nicht wie weit der Fortschritt für diese ist.

    SystemException schrieb:

    Das ist zwar "eine Lösung" aber keine genrelle.
    Warum nicht? Das verstehe ich nicht.

    SystemException schrieb:

    Man löst nicht ein Problem, indem man es mit anderen Möglichkeiten umgeht.
    Wie? Die Frameworkfunktionalität zu verwenden wäre jetzt der "richtige" weg. Hört sich für mich so an als würdest du denken das wäre ein Workaround? Ist es aber nicht.?

    SystemException schrieb:

    Eine Variante zur Entpackung, welche ich gerne benutze ist mit Hilfe von Shell32.
    ​System.IO.Compression ist doch extra in das Framework integriert worden, damit man keine externen Bibliotheken oder nativen Systeme braucht. Warum willst du das dann nicht nutzen?
    Hey, danke für eure Antworten. Schön, dass wir das Thema wieder pushen können :D

    @Bluespide
    Warum nicht? Das verstehe ich nicht.

    Wie? Die Frameworkfunktionalität zu verwenden wäre jetzt der "richtige" weg. Hört sich für mich so an als würdest du denken das wäre ein Workaround? Ist es aber nicht.?

    Eine Variante zur Entpackung, welche ich gerne benutze ist mit Hilfe von Shell32.

    Weil diese Lösung erst dann eine Lösung ist, wenn man einen anderen Weg beschritten hat,
    was bei meiner Fragestellung vermieden werden soll. Mir ist klar, dass, wenn es nur darum geht das hin zu bekommen, es einfacher
    wäre einfach die Framework Methoden zu benutzen. Aber trotzdem interessiert es mich, ob das auch mit den hier häufig vertretenen Methoden
    machbar ist.

    @slice
    Okay. So könnte man es auch zB prozentual anzeigen lassen.
    Wäre doch eine Lösung, oder?
    Gegenfrage: Wie könnte das denn dann aussehen?
    Also wie rechnet man denn sowas aus? Finde dazu nix D:
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SystemException“ ()

    Du zählst alle Dateien in dem Archiv? Oder möchtest du den fertigen Code haben, dann solltest du ein Thread im Marktplatz eröffnen.
    Nein ich möchte keinen Fertig-Code. Das möchte ich generell nicht.
    Ich will nur nen Denk-Anstoß.
    Wie kann ich denn vor dem Entpacken auslesen, wie viele Dateien in einem Archiv sind, ohne das Archiv voher entpacken zu müssen??

    LG!
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Da gibt es mehrere Wege, zwei die mir jetzt einfallen:

    1. Die Datei Byte für Byte durchgehen und nach einem Muster suchen: The structure of a PKZip file - Local file headers ****************
    2. ZipFile.OpenRead(zipPath).Entries: ZipArchiveEntry Class

    Edit:
    ****************: Wichtig!!!!! Du solltest die Datei nicht komplett in den Arbeitsspeicher laden, arbeite lieber mit Streams.
    Okay danke, werde ich mal versuchen. Hoffentlich ist das nicht zu Resourcen-Fressend :D
    Empfiehlst du Multi-Threading?

    BTW: Sollte man die Menschen hier eher duzen oder siezen? ?(

    LG
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Ich glaube per Du ist hier schon Ok, außer du möchtest den slice auf einen winzig kleinen Fehler hinweisen, z.B. so:

    Hallo Mr. Slice,
    leider ist Ihre Nr. 2 der vorherigen Antwort nicht passen, da diese den System.IO.Compression Namespace und damit die Frameworkfunktion verwendet. Diese wurde aber bereits ausgeschlossen, da der Ersteller des Threads bereits den Wunsch geäußert hat es explicit ohne diese und nur mit der ​Shell32.dll zu realisieren.

    Ne spaß :D
    Hallo Herr Bluespide,
    das ist mir bewusst, je doch habe ich dieses gekonnt ignoriert. Herr SystemException gab als Grund, warum er darauf verzichten möchte, so eine kryptische Antwort das sie mir egal war. Denn das "Problem" kann man auch mit Framework Funktionen lösen, sofern man das Problem auf das reduziert wovon ich in vorherigen Posts sprach.

    Ach Fck, das gebe ich mir nicht ... mir ist die Anrede hier ziemlich Latte und so dürfte es fast allen hier gehen.
    Sollte das jetzt ein versteckter Seitenhieb an mich sein? xD Meine Antwort war für mich klar verständlich. Wenn was nicht verstanden ist, kann man einfach nachfragen. Dann erkläre ich es erneut in einer anderen Fassung ;)

    Ok, also per Du :)
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Nö, mir ist einfach nicht klar was du mit "Das ist zwar "eine Lösung" aber keine generelle. Man löst nicht ein Problem, indem man es mit anderen Möglichkeiten umgeht." meinst und was gegen die Framework Methoden spricht, wenn man damit mehr oder weniger das erreichen kann, was meines Verständnisses nach die Fragestellung ist.

    Frage: Dateien aus einem Zip extrahieren und eine Art "Status" implementieren
    Antwort: ZipArchive Klasse benutzten, alle Entries zählen und nach dem extrahieren einer Datei eine andere Variable inkrementieren
    Wie bereits gesagt habe ich nichts gegen die Verwendung dieser Methoden. Es geht mir nur darum, ob man auch bei den hier im Forum verbreiteten Methoden ähnliches umsetzen kann statt auf die Framework Methoden "umsteigen" zu müssen. Daran ist jetzt wirklich nichts schwer zu verstehen :)
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    SystemException schrieb:

    bei den hier im Forum verbreiteten Methoden
    handelt es sich um Methoden aus älteren Beiträgen.
    Damals hat .Net das noch nicht nativ unterstützt und man war gezwungen, sich solche Hilfskrücken zu bauen.
    Diese Krücken finden bei VB6 und VBA immer noch Anwendung, weil dort die Unterstützung dafür fehlt.
    Unter VB.Net gibt es heute keinen Grund mehr, den Explorer dazu zu vergewaltigen, ein ZIP zu entpacken.

    Wenn du dennoch mit veralteten Methoden arbeiten möchtest, kannst du das gerne tun.
    Wenn dir dabei Funktionalität fehlt, dann ist das halt so.

    Wenn ich mir einen VW Käfer aus den 70er Jahren kaufe, darf ich mich nicht beklagen, dass die Sitze nicht beheizbar sind.
    Findige Bastler bauen sich dann vielleicht selbst Heizmatten unter den Allerwertesten, aber den Komfort einer modernen S-Klasse werden sie damit nicht erreichen.
    Du scheinst wohl zu den Leuten gehören, die eher auf Oldtimer stehen.

    Wenn du den Thread mit .NET 4.5 taggst, dann wundere dich aber nicht, wenn zeitgemäße Vorschläge kommen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Was ist daran so schwer zu verstehen, dass ich das weiß und ich mich einfach dafür interessiere, ob es mit den anderen Methoden auch geht. Diese sind übrigens nicht alle so veraltet wie von dir geschildert. Ich frage mich warum viele hier der Meinung sind, sie wären Gott oder Ähnliches. Wenn der Ersteller deutlich macht auf welchen Kriterien die Lösung basieren soll, dann hält man sich gefälligst dran. Vor allem dann, wenn dieser beteuert die anderen womöglich leichteren Wege zur Kenntnis genommen zu haben. Na gut, da wenigstens eine Person (zunächst) produktiv geantwortet hat und hier nur noch blödsinniges Off-Topic von euch produziert wird:
    Thema beendet.

    Die Farbe "rot" gehört der Moderation. Farbe entfernt. ~Trade
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Trade“ ()

    SystemException schrieb:

    Nun bleibt die Frage aber: Wie kann ich ohne externe Tools den Fortschritt eines solchen ProzesseszB in einer ProgressBar anzeigen lassen. Oder: Wie kann ich die zuletzt extrahierte Datei in einem Label anzeigen lassen?

    Dies wurde ja beantwortet ohne Externe Tools. Kann petaod auch nur zustimmen warum will man veraltete Methoden verwenden wenn es diese denn bereits im Framework gibt.
    Es macht einfach kein Sinn etwas aus dem Framework nicht zu nutzen wenn man mit dem Framework programmiert.

    SystemException schrieb:

    Wenn der Ersteller deutlich macht auf welchen Kriterien die Lösung basieren soll, dann hält man sich gefälligst dran

    Wie schon gesagt wurde hast du deinen Thread mit 4.5 getaggt und dort gibt es nun mal die Lösung die hier gezeigt wurde, die sogar ohne Hilfsmittel ist oder extra Tools.
    Desweiteren wenn du sowas spezielles möchtest und du einfach null offen bist das Framework zu nutzen geh in den Marktplatz und irgendjemand wird
    bestimmt für extra Geld das ganze für dich neu erfinden wenn dir das Framework nicht reicht.
    So desweiteren hast du uns hier null deines Codes gezeigt was du schon selber probiert hast.
    Bei dem veraltetem Zeugs konnte man doch die Parameter setzten ob nen Progress angezeigt wird oder halt nicht.

    Ich geh mal eben für dich googlen.

    Hier mal ein stackoverflow: stackoverflow.com/questions/28…n-work-with-a-progressbar
    Daraus gehe ich mir die CopyHere Methode anschauen: docs.microsoft.com/en-us/windo…f-shldisp-folder-copyhere

    Da steht alles was man wissen muss. Ich hab das selber nicht getestet sondern ledeglich "shell32 unzip progress c#" in die Google suche eingegeben und der erste Treffer
    führte mich schon zur Lösung nur mal so nebenbei gesagt.

    Und das hier alles Offtopic ist bezweifel ich mal stark. Hier gibt es Lösungsansätze die du alle nicht annimmst.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Scheint als will der TE die ZIPs auf die harte Tour entpacken.

    @SystemException
    Fang hier an und bau es dir, wie es dir lieb ist.
    pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    @xChRoNiKx Hey,
    danke erstmal für deine Antwort.
    Ja das mit dem Tag ist mein Fehler, trotz alledem hätte man ja meinen Post lesen + einhalten können oder? Die Fähigkeit zu lesen wurde uns nicht einfach so gegeben.
    Danke für deine Ratschläge. Hätte jemand meinen Code gefordert, hätte ich ihn auch geteilt. Aber die Herrschaften schienen ja genau zu wissen worum es geht, als ich von den Begriffen Gebrauch machte.
    Und natürlich ist es Offtopic, wenn es nichts mit meiner Frage zu tun hat. Mein Problem ist ja gerade, dass NIEMAND richtig liest. Es sind eben keine Lösungsansätze, die auf meine Frage passen, die ich jetzt mehrmals erneut erläutert habe. Einige haben es ja verstanden. Wenn Antworten nix mit dem gestellten Thema des TEs zu tun haben ist es für mich Offtopic.
    UND zum letzten mal: Ich nehme diese Lösungen IMMER NOCH zur Kenntnis. Ich habe eben nur aktuell das Interesse daran dies auch bei den anderen Methoden hinzubekommen. Das nennt man "Wissensbegierde", was den Menschen seit der Steinzeit implementiert wurde und im Laufe der Evolution immer stärker wurde. Schön und gut, dass ich jetzt ein paar Lösungen weiß. Aber die waren alle nicht die Antwort auf meine Frage. Geht das jetzt mal in den Schädel? Danke.

    //Edit:
    Aber ich habe jetzt auch zur Kenntnis genommen, dass dieses Forum dazu nicht in der Lage ist auch dieser Fragestellung nach zu gehen. Das ist ja in Ordnung. Dann stelle ich meine Frage eben an andere Personen. Dieses Thema wurde deswegen ja auch geschlossen!

    LG und Danke!

    Vollzitat entfern und Farbe "rot" geändert. ~Trade
    Bitte benutze OPTION STRICT ON.
    Und optional OPTION EXPLICIT ON.
    Hier ein CODE-CONVERTER.

    Suchanfragen-Ansatz für GOOGLE.
    Prüfe deinen Beitrag in einer RECHTSCHREIBPRÜFUNG.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()