Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateien incl. Inhalte der ZIP auflisten?

Dateien incl. Inhalte der ZIP auflisten?
12.11.2020 22:33:14
Selma
Hallo zusammen,
ich habe eine Datei https://www.herber.de/bbs/user/141516.xlsm beigefügt, mit der ich die Dateien auflisten kann. Das funktioniert soweit perfekt.
Wer kann mir bitte helfen den Code zu ergänzen, damit die Inhalte der ZIP-Dateien oder ähnliche archivierten Dateien mit aufgelistet werden?
Herzlichen Dank im Voraus!
Beste Grüße,
Selma

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien incl. Inhalte der ZIP auflisten?
13.11.2020 06:21:23
Luschi
Hallo Selma,
mit ein bißchen Googeln hättest Du folgenden Link gefunden: h i e r
Gruß von Luschi
aus klein-Paris
AW: aus dem Archiv
13.11.2020 09:00:24
Fennek
Hallo,
im Archiv fand ich diese beide Codes:

Dim i As Long
Sub dateien_auflisten()
Dim objShell, objFolder
Dim BrowseDir, varName
Set objShell = CreateObject("Shell.Application")
Set BrowseDir = objShell.BrowseForFolder(0, "Ordner auswählen", &H1000, 17)
If Not BrowseDir Is Nothing Then
Application.ScreenUpdating = False
Cells.Clear
i = 1
Set objFolder = objShell.Namespace(BrowseDir.items().Item().Path)
Cells(1, 1) = "Pfad"
Cells(1, 2) = "Erstelldatum"
Cells(1, 3) = "Besitzer"
rekursiv BrowseDir.items().Item().Path, True
Application.ScreenUpdating = True
Columns.AutoFit
End If
Set objShell = Nothing
End Sub
Function rekursiv(ordner, unterordner As Boolean)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(ordner)
For Each varName In objFolder.items
If varName.Type = "Dateiordner" And unterordner = True Then
rekursiv varName.Path, True
If UBound(Split(varName.Path, "\")) = 2 Then
i = i + 1
Cells(i, 1) = varName.Path
Cells(i, 2) = objFolder.GetDetailsOf(varName, 5)
Cells(i, 3) = objFolder.GetDetailsOf(varName, 10)
End If
End If
Next
Set objFolder = Nothing
End Function

und nur für die Ordner eines Zip-Archiv:

Sub T_1()
Pf = "c:\users\office\desktop\"
f = "Conttroller.xlsm.zip"
With CreateObject("shell.application").Namespace(Pf & f)
For i = 0 To .Items.Count - 1
Debug.Print .Items.Item(i)
Next i
End With
End Sub
Heute habe ich es nicht noch einmal geprüft.
mfg
Anzeige
AW: Dateien incl. Inhalte der ZIP auflisten?
13.11.2020 09:24:10
volti
Hall Selma,
das Auslesen über die Shell.Application-Methode (s.Luschi) ist schnell, klein und praktisch.
Bin mir aber nicht sicher, ob z.B. auch Zipinhalte aus Zip in Zip geholt werden können, falsch das auch benötigt werden sollte.
Und sollten noch weitere Infos benötigt werden:
In meiner Bastelkiste habe ich noch etwas aus alten Zeiten, mit dem Du auch gezippte Inhalte, Unterordner, Zip-Rate usw. extrahieren kannst.
Ist halt deutlich mehr Code, weil die Inhalte zu Fuß geholt werden, aber es funktioniert.
Probiere bei Bedarf mal das Tool aus. Sollte es gefallen, helfe ich Dir gern beim Einbau in Dein Tool.
Ansonsten wünsche ich viel Erfolg mit der anderen Methode...
Code:
[Cc][+][-]

Option Explicit Const cHeadtext = "Vereinfachte Zipinhalt-Ermittlung" Sub Starte() CheckeZipDatei "C:\Users\voltm\Desktop\CustomUIEditor.zip" End Sub Private Sub CheckeZipDatei(sFile As String) '

Function untersucht eine Zipdatei und erstellt ein Inhaltsverzeichnis
Dim sData As String, iPointer As Long, lWert As Long, i As Integer, X As Integer Dim iFileLength As Long, sArr() As String, Teil() As String If Dir$(sFile) <> "" Then Open sFile For Binary As #1 'Feststellen, ob der Inhalt einer gültigen Zipdatei entspricht; nicht nur die Extension muss stimmen If Input(4, #1) <> ("PK" & Chr$(3) & Chr$(4)) Then MsgBox "Die gewählte Datei '" & sFile & "' ist keine gültige Zip-Datei!", vbCritical, cHeadtext Close #1: Exit Sub End If Seek #1, 1 'Einlesen der einzelnen Dateiabschnitte bis zum Inhaltsverzeichnis iPointer = 1 Do While Not EOF(1) Seek #1, iPointer + 18 lWert = GetValue(Input(4, #1)) 'Länge des komprimierten Datenbereichs Seek #1, iPointer + 26 'Den iPointer um 30 plus Dateitextlänge plus Offset weitersetzen (Offset für Dateilänge=0 gebraucht) iPointer = iPointer + 30 + GetValue(Input(2, #1)) + GetValue(Input(2, #1)) Seek #1, iPointer If Input(2, #1) <> "PK" Then iPointer = iPointer + lWert 'Bei eingebundener ZipDatei ist kein Datenbody vorhanden Seek #1, iPointer If Input(4, #1) = "PK" & Chr$(1) & Chr$(2) Then Exit Do Loop 'Einlesen der restlichen Zipdateibytes (Inhaltsverzeichnis) Seek #1, iPointer Do While Not EOF(1) ReDim Preserve sArr(9, i) sData = Input(4, #1) 'vierstellige PK/UT-Kennung lesen Select Case sData Case "PK" & Chr$(1) & Chr$(2) sData = Input(8, #1) 'unbekannter Binärblock 'Uhrzeit und Datum lWert = GetValue(Input(2, #1)) sArr(2, i) = Right$("00" & ((lWert And &HF800) / &H800), 2) & ":" _ & Right$("00" & ((lWert And &H7E0) / &H20), 2) 'Sekunden & Right$("00" & ((lWert And &H1F) * 2), 2) lWert = GetValue(Input(2, #1)) sArr(2, i) = Right$("00" & ((lWert And &H1F)), 2) & "." _ & Right$("00" & ((lWert And &H1E0) / &H20), 2) & "." _ & Right$("00" & ((lWert And &HFE00) / &H200) + 1980, 4) _ & " " & sArr(2, i) 'Binärblock CRC holen sData = Input(4, #1) For X = Len(sData) To 1 Step -1 If sArr(6, i) <> "" Then sArr(6, i) = sArr(6, i) & "." sArr(6, i) = sArr(6, i) & Right("00" & Hex(Asc(Mid(sData, X, 1))), 2) Next sArr(5, i) = GetValue(Input(4, #1)) 'PackedSize sArr(3, i) = GetValue(Input(4, #1)) 'OriginalSize If sArr(3, i) <> 0 Then sArr(4, i) = 1 - (sArr(5, i) / sArr(3, i)) 'Prozent End If iFileLength = GetValue(Input(2, #1)) 'Dateilänge sData = Input(16, #1) 'weiterer unbekannter Binärblock 'Dateinamen und optionalen Pfad ermitteln sArr(1, i) = Input(iFileLength, #1) X = InStrRev(sArr(1, i), "/") If X > 0 Then sArr(0, i) = Left$(sArr(1, i), X - 1) 'Pfad sArr(1, i) = Mid$(sArr(1, i), X + 1) 'Datei End If Teil = Split(sArr(1, i), ".") If UBound(Teil) > 0 Then sArr(7, i) = Teil(UBound(Teil)) i = i + 1 Case "PK" & Chr$(5) & Chr$(6) sData = Input(16, #1) 'Mindestbyteanzahl lesen Do sData = Input(1, #1) If EOF(1) Or sData = "P" Then Exit Do Loop If EOF(1) Then Exit Do Seek #1, Seek(1) - 1 'iPointer wieder vor das "P" setzen Case "PK" & Chr$(5) & Chr$(0) sData = Input(9, #1) Case Else Do sData = Input(1, #1) If EOF(1) Or sData = "P" Then Exit Do Loop If EOF(1) Then Exit Do Seek #1, Seek(1) - 1 'iPointer wieder vor das "P" setzen End Select Loop If i = 0 Then MsgBox "Es konnte kein Inhalt ermittelt werden!", vbCritical, cHeadtext Else With ActiveSheet 'Zip .Select .Cells.ClearContents .Cells(1, 1).Resize(1, 8) = Array("Pfad", "Dateiname", "geändert", "Original", "Prozent", "Gepackt", "CRC", "Erw") .Cells(2, 1).Resize(i, 8).value = Application.Transpose(sArr()) End With End If Close #1 MsgBox "Es konnten " & CStr(i) & " Datei(en) ermittelt werden!", vbInformation, cHeadtext Else MsgBox "Die Datei '" & sFile & "' wurde nicht gefunden!", vbCritical, cHeadtext End If End Sub Private Function GetValue(S As String) As Long 'Funktion wandelt einen String in eine Zahl um Dim i As Integer For i = 1 To Len(S) GetValue = GetValue + Asc(Mid(S, i, 1)) * 256 ^ (i - 1) Next End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Dateien incl. Inhalte der ZIP auflisten?
13.11.2020 09:25:18
volti
Hall Selma,
das Auslesen über die Shell.Application-Methode (s.Luschi) ist schnell, klein und praktisch.
Bin mir aber nicht sicher, ob z.B. auch Zipinhalte aus Zip in Zip geholt werden können, falsch das auch benötigt werden sollte.
Und sollten noch weitere Infos benötigt werden:
In meiner Bastelkiste habe ich noch etwas aus alten Zeiten, mit dem Du auch gezippte Inhalte, Unterordner, Zip-Rate usw. extrahieren kannst.
Ist halt deutlich mehr Code, weil die Inhalte zu Fuß geholt werden, aber es funktioniert.
Probiere bei Bedarf mal das Tool aus. Sollte es gefallen, helfe ich Dir gern beim Einbau in Dein Tool.
Ansonsten wünsche ich viel Erfolg mit der anderen Methode...
Code:
[Cc][+][-]

Option Explicit Const cHeadtext = "Vereinfachte Zipinhalt-Ermittlung" Sub Starte() CheckeZipDatei "C:&bsol;Users&bsol;voltm&bsol;Desktop&bsol;CustomUIEditor.zip" End Sub Private Sub CheckeZipDatei(sFile As String) '

Function untersucht eine Zipdatei und erstellt ein Inhaltsverzeichnis
Dim sData As String, iPointer As Long, lWert As Long, i As Integer, X As Integer Dim iFileLength As Long, sArr() As String, Teil() As String If Dir$(sFile) <> "" Then Open sFile For Binary As #1 'Feststellen, ob der Inhalt einer gültigen Zipdatei entspricht; nicht nur die Extension muss stimmen If Input(4, #1) <> ("PK" & Chr$(3) & Chr$(4)) Then MsgBox "Die gewählte Datei '" & sFile & "' ist keine gültige Zip-Datei!", vbCritical, cHeadtext Close #1: Exit Sub End If Seek #1, 1 'Einlesen der einzelnen Dateiabschnitte bis zum Inhaltsverzeichnis iPointer = 1 Do While Not EOF(1) Seek #1, iPointer + 18 lWert = GetValue(Input(4, #1)) 'Länge des komprimierten Datenbereichs Seek #1, iPointer + 26 'Den iPointer um 30 plus Dateitextlänge plus Offset weitersetzen (Offset für Dateilänge=0 gebraucht) iPointer = iPointer + 30 + GetValue(Input(2, #1)) + GetValue(Input(2, #1)) Seek #1, iPointer If Input(2, #1) <> "PK" Then iPointer = iPointer + lWert 'Bei eingebundener ZipDatei ist kein Datenbody vorhanden Seek #1, iPointer If Input(4, #1) = "PK" & Chr$(1) & Chr$(2) Then Exit Do Loop 'Einlesen der restlichen Zipdateibytes (Inhaltsverzeichnis) Seek #1, iPointer Do While Not EOF(1) ReDim Preserve sArr(9, i) sData = Input(4, #1) 'vierstellige PK/UT-Kennung lesen Select Case sData Case "PK" & Chr$(1) & Chr$(2) sData = Input(8, #1) 'unbekannter Binärblock 'Uhrzeit und Datum lWert = GetValue(Input(2, #1)) sArr(2, i) = Right$("00" & ((lWert And &HF800) / &H800), 2) & ":" _ & Right$("00" & ((lWert And &H7E0) / &H20), 2) 'Sekunden & Right$("00" & ((lWert And &H1F) * 2), 2) lWert = GetValue(Input(2, #1)) sArr(2, i) = Right$("00" & ((lWert And &H1F)), 2) & "." _ & Right$("00" & ((lWert And &H1E0) / &H20), 2) & "." _ & Right$("00" & ((lWert And &HFE00) / &H200) + 1980, 4) _ & " " & sArr(2, i) 'Binärblock CRC holen sData = Input(4, #1) For X = Len(sData) To 1 Step -1 If sArr(6, i) <> "" Then sArr(6, i) = sArr(6, i) & "." sArr(6, i) = sArr(6, i) & Right("00" & Hex(Asc(Mid(sData, X, 1))), 2) Next sArr(5, i) = GetValue(Input(4, #1)) 'PackedSize sArr(3, i) = GetValue(Input(4, #1)) 'OriginalSize If sArr(3, i) <> 0 Then sArr(4, i) = 1 - (sArr(5, i) / sArr(3, i)) 'Prozent End If iFileLength = GetValue(Input(2, #1)) 'Dateilänge sData = Input(16, #1) 'weiterer unbekannter Binärblock 'Dateinamen und optionalen Pfad ermitteln sArr(1, i) = Input(iFileLength, #1) X = InStrRev(sArr(1, i), "/") If X > 0 Then sArr(0, i) = Left$(sArr(1, i), X - 1) 'Pfad sArr(1, i) = Mid$(sArr(1, i), X + 1) 'Datei End If Teil = Split(sArr(1, i), ".") If UBound(Teil) > 0 Then sArr(7, i) = Teil(UBound(Teil)) i = i + 1 Case "PK" & Chr$(5) & Chr$(6) sData = Input(16, #1) 'Mindestbyteanzahl lesen Do sData = Input(1, #1) If EOF(1) Or sData = "P" Then Exit Do Loop If EOF(1) Then Exit Do Seek #1, Seek(1) - 1 'iPointer wieder vor das "P" setzen Case "PK" & Chr$(5) & Chr$(0) sData = Input(9, #1) Case Else Do sData = Input(1, #1) If EOF(1) Or sData = "P" Then Exit Do Loop If EOF(1) Then Exit Do Seek #1, Seek(1) - 1 'iPointer wieder vor das "P" setzen End Select Loop If i = 0 Then MsgBox "Es konnte kein Inhalt ermittelt werden!", vbCritical, cHeadtext Else With ActiveSheet 'Zip .Select .Cells.ClearContents .Cells(1, 1).Resize(1, 8) = Array("Pfad", "Dateiname", "geändert", "Original", "Prozent", "Gepackt", "CRC", "Erw") .Cells(2, 1).Resize(i, 8).value = Application.Transpose(sArr()) End With End If Close #1 MsgBox "Es konnten " & CStr(i) & " Datei(en) ermittelt werden!", vbInformation, cHeadtext Else MsgBox "Die Datei '" & sFile & "' wurde nicht gefunden!", vbCritical, cHeadtext End If End Sub Private Function GetValue(S As String) As Long 'Funktion wandelt einen String in eine Zahl um Dim i As Integer For i = 1 To Len(S) GetValue = GetValue + Asc(Mid(S, i, 1)) * 256 ^ (i - 1) Next End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: @volti
13.11.2020 10:21:59
Fennek
Hallo,
in der malware-Analyse werden MS-Office-Dateien in einem password-geschützten zip weitergegeben. Dann wird die Excel-/Word-Datei ausgewertet ohne das zip-Archiv auszupacken. Die geht mit dem Python-Programm

https:// _
blog.didierstevens.com/2020/07/27/update-zipdump-py-version-0-0-20/
Meine Versuche diesen Ansatz in einem eigenen Code nach zu vollziehen waren nicht erfolgreich.
Zimdump.py zeigt nicht nur die Ordner-Struktur, sondern auch den Inhalt.
mfg
Anzeige
AW: @volti
13.11.2020 11:02:11
volti
Danke Fennek,
für die interessante Info.
Mein geposteter Code ist halt schon uralt und ursprünglich mal für eine andere Programmiersprache geschrieben worden...
Wie man sieht, führen mal wieder viele Wege nach Rom.
VG KH
AW: @volti
13.11.2020 14:10:19
Selma
Hallo volti,
ich habe deinen Code getestet und es hat funktioniert.
Wenn du mir hilfst könntest in die von mir hochgeladene Datei einzubauen, wäre perfekt.
Vielen herzlichen Dank im Voraus.
Beste Grüße,
Selma
AW: @volti
13.11.2020 17:45:15
volti
Hallo Selma,
habe den Zip-Teil in Dein Tool eingebaut.
Nun muss es natürlich noch getestet und ggf. nachgeschärft werden.
Ich werde mich auch selbst noch mal mit dem Zip-Teil beschäftigen, denn der ist schon alt und kann ggf. noch verbessert werden.
Dateiübersicht
viele Grüße
Karl-Heinz
Anzeige
AW: @volti
14.11.2020 19:01:04
Selma
Hallo Karl-Heinz,
vielen lieben Dank. Es sieht sehr gut aus.
Drei Fragen:
1. In der Spalte C wird das Datum allgemein in diesem Format beispielsweise angezeigt: 05.11.2020 19:46 Soweit alles in Ordnung. Wo kann ich bitte einstellen, dass grundsätzlich dies für alle Zeilen ab Zeile 2 in der Spalte C gilt?
2. Bei ZIP-Dateien wird in der Spalte A der Pfad der Datei eingetragen. Wie kann ich es bitte einstellen, dann der Pfad auch in darunterliegenden Zeilen ebenfalls eingetragen wird?
3. Ich habe Dateien die in den Dateinamen das Zeichen Raute # enthalten. Hier funktioniert der Hyperlink Methodik nicht. Gibt es hierfür auch eine Lösung?
Beste Grüße,
Selma
Anzeige
AW: @volti
15.11.2020 10:36:15
volti
Hallo Selma,
hier noch mal ein Update.....
Dateiübersicht

1. In der Spalte C wird das Datum allgemein in diesem Format beispielsweise angezeigt: 05.11.2020 19:46 Soweit alles in Ordnung. Wo kann ich bitte einstellen, dass grundsätzlich dies für alle Zeilen ab Zeile 2 in der Spalte C gilt?

Ich habe das Datum für die Zip-internen Zeiten gekürzt. Da es kein Datum-Format ist, kann man das Format nicht so einfach umstellen bzw. man kann es, bringt aber nix.

2. Bei ZIP-Dateien wird in der Spalte A der Pfad der Datei eingetragen. Wie kann ich es bitte einstellen, dann der Pfad auch in darunterliegenden Zeilen ebenfalls eingetragen wird?

Den Hauptpfad der Zip-Datei habe ich jetzt immer vorangestellt. Den als Link einzufügen, macht keinen Sinn, denn die Dateien sind ja im Zip eingefügt.....

3. Ich habe Dateien die in den Dateinamen das Zeichen Raute # enthalten. Hier funktioniert der Hyperlink Methodik nicht. Gibt es hierfür auch eine Lösung?

Man findet im Netz Dutzende von Beiträgen zu diesem Thema, alle erfolglos, denn gerade dieses Zeichen macht erhebliche Probleme. Da kann ich Dir z.Zt. nicht helfen
viele Grüße aus Hessen
Karl-Heinz
Anzeige

27 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige