public virtual bool writeToFile(cape.File file) { if (!(file != null)) { return(false); } if (getIsDirectory()) { return(file.createDirectoryRecursive()); } var reader = getContentReader(); if (!(reader != null)) { return(false); } var fp = file.getParent(); if (fp != null) { fp.createDirectoryRecursive(); } var writer = file.write(); if (!(writer != null)) { if (reader is cape.Closable) { ((cape.Closable)reader).close(); } return(false); } var buf = new byte[4096 * 4]; var v = true; var n = 0; while ((n = reader.read(buf)) > 0) { var nr = writer.write(buf, n); if (nr != n) { v = false; break; } } if (!v) { file.remove(); } if (reader != null && reader is cape.Closable) { ((cape.Closable)reader).close(); } if (writer != null && writer is cape.Closable) { ((cape.Closable)writer).close(); } return(v); }
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); }