List contents of zip file?

Mac OSX specific forum
WilliamL
Addict
Addict
Posts: 1224
Joined: Mon Aug 04, 2008 10:56 pm
Location: Seattle, USA

List contents of zip file?

Post by WilliamL »

Does anyone know how to list the contents of a zip file (without un-zipping it)?
MacBook Pro-M1 (2021), Sonoma 14.4.1, PB 6.10LTS M1
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Re: List contents of zip file?

Post by ts-soft »

OpenPack() and than ExaminePack() (this is no unzipping!)
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
WilliamL
Addict
Addict
Posts: 1224
Joined: Mon Aug 04, 2008 10:56 pm
Location: Seattle, USA

Re: List contents of zip file?

Post by WilliamL »

Oh, a whole new area of PB for me! Kinda like below.

Code: Select all

EnableExplicit
UseZipPacker()
Define cnt,size.f,txt$,stxt$,filename$
filename$ = OpenFileRequester("Please choose zip to list","","zip",0)
If OpenPack(0,filename$) 
    If ExaminePack(0)
        While NextPackEntry(0)
            cnt+1
            size=PackEntrySize(0)
            If size>999999
                size/1000000
                stxt$="mb"
            Else
                size/1000
                stxt$="kb"
            EndIf
            txt$+Str(cnt)+". " + PackEntryName(0) + "   Size: " +FormatNumber(size,1)+stxt$+Chr(13)
        Wend
    EndIf
    ClosePack(0)
    MessageRequester("Contents of:"+filename$,txt$)
EndIf
MacBook Pro-M1 (2021), Sonoma 14.4.1, PB 6.10LTS M1
WilliamL
Addict
Addict
Posts: 1224
Joined: Mon Aug 04, 2008 10:56 pm
Location: Seattle, USA

Re: List contents of zip file?

Post by WilliamL »

This what I settled for:

The OpenFileRequesterEx is Mac only so if you have something else then use the PB version of OpenFileRequester otherwise it should run everywhere. :)

Code: Select all

EnableExplicit
UseZipPacker()

Procedure.s OpenFileRequesterEx(DefaultFile.s,defaultdirectory.s,AllowedFileTypes.s, Message.s)
    Protected Result.s, NSPanel, NSEnumerator, NSURL
    
    NSPanel = CocoaMessage(0, 0, "NSOpenPanel openPanel")
    CocoaMessage(0, NSPanel, "setMessage:$", @Message)
    CocoaMessage(0, NSPanel, "setAllowedFileTypes:", CocoaMessage(0, CocoaMessage(0, 0, "NSString stringWithString:$", @AllowedFileTypes), "componentsSeparatedByString:$", @"|"))
    CocoaMessage(0, NSPanel, "setDirectoryURL:", CocoaMessage(0, 0, "NSURL fileURLWithPath:$", @defaultdirectory))
    CocoaMessage(0, NSPanel, "setNameFieldStringValue:$", @DefaultFile)
  
    If CocoaMessage(0, NSPanel, "runModal")
        NSEnumerator = CocoaMessage(0, CocoaMessage(0, NSPanel, "URLs"), "objectEnumerator")
        NSURL = CocoaMessage(0, NSEnumerator, "nextObject")
        If NSURL
            Result = PeekS(CocoaMessage(0, CocoaMessage(0, NSURL, "path"), "UTF8String"), -1, #PB_UTF8)
            NSURL = CocoaMessage(0, NSEnumerator, "nextObject") ; load only one file!
        EndIf
    EndIf
  ProcedureReturn Result
EndProcedure

Define cnt,size.f,txt$,stxt$,filename$,filesize.q,unpackfilesize.q
filename$ = OpenFileRequesterEx("","","zip","Please choose zip file to list")
filesize = FileSize(filename$)
If OpenPack(0,filename$) 
    If ExaminePack(0)
        While NextPackEntry(0)
            cnt+1
            size=PackEntrySize(0) : unpackfilesize+size
            If size>999999
                size/1000000
                stxt$="mb"
            Else
                size/1000
                stxt$="kb"
            EndIf
            txt$+Str(cnt)+". " + PackEntryName(0) + "   Size: " +FormatNumber(size,1)+stxt$+Chr(13)
        Wend
    EndIf
    ClosePack(0)
    txt$+"---Zip file size: "+FormatNumber(filesize/1000000,2)+" (unzip "+FormatNumber(unpackfilesize/1000000,2)+")---"
    MessageRequester("Contents of:"+GetFilePart(filename$),txt$)
EndIf
MacBook Pro-M1 (2021), Sonoma 14.4.1, PB 6.10LTS M1
Post Reply