Unzip - Problem bei Zips mit zu viel Inhalt

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ThePhil.

    Unzip - Problem bei Zips mit zu viel Inhalt

    Hiho,


    ich brauche mal Hilfe :) Mein Problem ist folgendes:

    Ich möchte alle Zips in einem Ordner entpacken (ohne Hilfsprogramm wie WinRar oder 7Zip) und dabei nur die Dateien mit Endung XML extrahieren.
    Jetzt kommt es aber zu dem Problem bzw. der Fehlermeldung

    "Fehler beim Kopieren der Datei oder des Ordners: Die Datei ist vorhanden."

    Es kommt daher, dass er pro Datei ein Temp-Verzeichnis anlegt:
    C:\Dokumente und Einstellungen\%username%\Lokale Einstellungen\Temp
    und sobald es mehr als 99 Dateien sind kommt die Fehlermeldung.

    Ich denke es gibt wohl Möglichkeiten zwischendurch den Müll wegzuräumen.

    Hier sonst erstmal mein Code:

    VB.NET-Quellcode

    1. ExtractTo="C:\TEMP\to\"
    2. ExtractFrom = "C:\TEMP\from\"
    3. 'If the extraction location does not exist create it.
    4. Set fso = CreateObject("Scripting.FileSystemObject")
    5. If NOT fso.FolderExists(ExtractTo) Then
    6. fso.CreateFolder(ExtractTo)
    7. End If
    8. 'Data selection
    9. Set objFolder = fso.GetFolder(ExtractFrom)
    10. Set colFiles = objFolder.Files
    11. 'Extraction
    12. For Each objFile in colFiles
    13. 'Extract the contants of the zip file.
    14. set objShell = CreateObject("Shell.Application")
    15. set FilesInZip=objShell.NameSpace(objFile.Path).items
    16. 'Extract data with ending XML
    17. For i = 0 To FilesInZip.Count - 1
    18. If lcase(right(FilesInZip.Item(i).Name, 4)) = ".xml" Then
    19. objShell.NameSpace(ExtractTo).CopyHere(FilesInZip.Item(i))
    20. End If
    21. Next
    22. Next
    23. 'cleanUp
    24. Set fso = Nothing
    25. Set objShell = Nothing
    26. Set FilesInZip = Nothing




    Für unsauberen Code entschuldige ich mich schon mal. Ich bin nur Leihe :rolleyes:

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

    Der Code funktioniert wie gesagt, solange es weniger als 99Dateien sind innerhalb des Zips, weil sonst die TempOrdner zu viele werden, als das Windoof da aufräumt.



    Ich schau mir die Seite aber mal genauer an :>)

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

    wenn ich exakt den VB-Code aus der Seite nehm bekomm ich die Meldung:

    Fehler: Anweisungsende erwartet
    Zeile 7 . Zeichen 21


    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.IO.Compression
    3. Module Module1
    4. Sub Main()
    5. Dim zipPath As String = "c:\temp\test\test.zip"
    6. Dim extractPath As String = "c:\temp\test1\"
    7. Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
    8. For Each entry As ZipArchiveEntry In archive.Entries
    9. If entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
    10. entry.ExtractToFile(Path.Combine(extractPath, entry.FullName))
    11. End If
    12. Next
    13. End Using
    14. End Sub
    15. End Module




    Ich will das doch nur als blödes Skript laufen lassen ;(
    :thumbsup: :thumbsup: :thumbsup: :thumbsup:

    Funktioniert nun. Man muss leider wirklich sich die Umstände machen und die TempOrdner immer löschen lassen.

    Jetzt bleibt nur noch schönheitsfehler zu beheben. Wenn ihr da noch Anmerkungen/Kritik habt her damit:



    VB.NET-Quellcode

    1. ExtractTo="C:\TEMP\test1\"
    2. ExtractFrom = "C:\TEMP\test\"
    3. 'If the extraction location does not exist create it.
    4. Set fso = CreateObject("Scripting.FileSystemObject")
    5. If NOT fso.FolderExists(ExtractTo) Then
    6. fso.CreateFolder(ExtractTo)
    7. End If
    8. 'Data selection
    9. Set objFolder = fso.GetFolder(ExtractFrom)
    10. Set colFiles = objFolder.Files
    11. 'Prepare Clean up
    12. Set WshShell = CreateObject("Wscript.Shell")
    13. tempfolder = WshShell.ExpandEnvironmentStrings("%temp%")
    14. 'Extraction
    15. For Each objFile in colFiles
    16. 'Extract the contants of the zip file.
    17. set objShell = CreateObject("Shell.Application")
    18. set FilesInZip=objShell.NameSpace(objFile.Path).items
    19. 'Extract data with ending XML
    20. For i = 0 To FilesInZip.Count - 1
    21. If lcase(right(FilesInZip.Item(i).Name, 4)) = ".xml" Then
    22. objShell.NameSpace(ExtractTo).CopyHere(FilesInZip.Item(i))
    23. 'CleanUp TempDir
    24. 'Call fso.DeleteFolder(tempfolder + "\Temporary Directory 1 for " + objFile.Name, True )
    25. Call fso.DeleteFolder(tempfolder + "\Temporäres Verzeichnis 1 für " + objFile.Name, True )
    26. End If
    27. Next
    28. Next
    29. 'cleanUp
    30. Set fso = Nothing
    31. Set objShell = Nothing
    32. Set FilesInZip = Nothing