This example shows a complete example of Metro ZIP file extraction. First, select the ZIP file to be decompressed and choose Save directory.
Private async void unzipfile (Object sender, routedeventargs e) {fileopenpicker fop = new fileopenpicker (); fop. filetypefilter. add (". zip "); fop. suggestedstartlocation = pickerlocationid. desktop; fop. viewmode = pickerviewmode. list; var zipfile = await fop. picksinglefileasync (); byte [] buffer = windowsruntimebufferextensions. toarray (await windows. storage. fileio. readbufferasync (zipfile); Using (Memor Ystream stream = new memorystream (buffer) {ziparchive = new ziparchive (stream, ziparchivemode. read); folderpicker fp = new folderpicker (); // Add file types to the folderpicker foreach (VAR ziparchiveentry in ziparchive. entries) {If (! Ziparchiveentry. fullname. endswith ("/") {string fileextension = ". "+ RegEx. match (ziparchiveentry. fullname, @ "[^ \.] \ W + $ "). value; If (! FP. filetypefilter. contains (fileextension) FP. filetypefilter. add (fileextension) ;}} FP. suggestedstartlocation = pickerlocationid. desktop; FP. viewmode = pickerviewmode. list; storagefolder unzipfolder = await FP. picksinglefolderasync (); int progress = 0; foreach (VAR ziparchiveentry in ziparchive. entries) {If (! String. isnullorempty (ziparchiveentry. fullname) {If (! Ziparchiveentry. fullname. endswith ("/") {string filename = ziparchiveentry. fullname. replace ("/", "\"); Using (Stream filedata = ziparchiveentry. open () {storagefile newfile = await unzipfolder. createfileasync (filename, creationcollisionoption. replaceexisting); Using (irandomaccessstream newfilestream = await newfile. openasync (fileaccessmode. readwrite) {using (Stream S = newfilestream. asstreamforwrite () {await filedata. copytoasync (s); await S. flushasync () ;}}}} progress ++; progressbar. value = progress * 100/ziparchive. entries. count ;}}}
Source Address