public static bool extractZipFileToDirectory(cape.File zipFile, cape.File destDir, System.Action <cape.File> listener = null) { if (!(zipFile != null)) { return(false); } if (!(destDir != null)) { return(false); } var zf = capex.util.ZipReader.forFile(zipFile); if (!(zf != null)) { return(false); } if (!destDir.isDirectory()) { destDir.createDirectoryRecursive(); } if (!destDir.isDirectory()) { return(false); } var array = zf.getEntries(); if (array != null) { var n = 0; var m = array.Count; for (n = 0; n < m; n++) { var entry = array[n]; if (entry != null) { var ename = entry.getName(); if (cape.String.isEmpty(ename)) { continue; } var dd = destDir; ename = cape.String.replace(ename, '\\', '/'); var array2 = cape.String.split(ename, '/'); if (array2 != null) { var n2 = 0; var m2 = array2.Count; for (n2 = 0; n2 < m2; n2++) { var comp = array2[n2]; if (comp != null) { if (object.Equals(comp, ".") || object.Equals(comp, "..")) { continue; } dd = dd.entry(comp); } } } if (listener != null) { listener(dd); } if (!entry.writeToFile(dd)) { return(false); } } } } return(true); }