示例#1
0
        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);
        }
示例#2
0
        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);
        }