Ejemplo n.º 1
0
        /// <summary>
        /// Support UTF8
        /// Create list files
        /// </summary>
        /// <param name="zip">Zip.</param>
        /// <param name="zipPath">Zip path.</param>
        /// <param name="srcDir">Source dir.</param>
        /// <param name="srcFiles">Source files.</param>
        /// <param name="deleteSrcFiles">If set to <c>true</c> delete source files.</param>
        /// <param name="removedFiles">remove files are added to the list file</param>
        public static void CreateZipAndList(this FastZip zip, string zipPath, string srcDir, IEnumerable <FileInfo> srcFiles, bool deleteSrcFiles, IEnumerable <string> removedFiles = null)
        {
            string zipName = PathUtil.GetFileNameWithoutExt(zipPath) + ".zip";
            // Compress
            List <string> paths = new List <string>();

            foreach (FileInfo f in srcFiles)
            {
                paths.Add(f.FullName);
            }

            // Generate MD5 digest for assets
            StringBuilder zipFilter   = new StringBuilder();
            StringBuilder fileListStr = new StringBuilder();

            fileListStr.Append(DownloadList.ZIP_HEADER).Append(zipName).Append("\n");

            // create zip filter and file list
            foreach (FileInfo f in srcFiles)
            {
                string fullPath     = f.FullName;
                string relativePath = PathUtil.GetRelativePath(fullPath, srcDir);
                zipFilter.Append(relativePath).Append("$;");
                fileListStr.Append(DownloadList.ZIP_ENTRY_HEADER);
                AddDigest(fileListStr, relativePath, fullPath);
            }
            // add remove list
            foreach (string r in removedFiles)
            {
                fileListStr.Append(DownloadList.DELETE_HEADER).Append(r).Append("\n");
            }
            zipFilter.Replace(@"\", @"\\");

            // Zipping
            TextReplacer replace = new TextReplacer();

            replace.AddReplaceToken(@"\(", @"\(");
            replace.AddReplaceToken(@"\)", @"\)");
            replace.AddReplaceToken(@"\+", @"\+");
            replace.AddReplaceToken(@"\.", @"\.");
            ZipEntryFactory ef = zip.EntryFactory as ZipEntryFactory;

            ef.IsUnicodeText = true;
            string filter = replace.Replace(zipFilter.ToString());

            UnityEngine.Debug.Log("srcdir:" + srcDir);
            UnityEngine.Debug.Log("filter:" + filter);
            zip.CreateZip(zipPath, srcDir, true, filter);
            if (deleteSrcFiles)
            {
                foreach (string deletePath in paths)
                {
                    File.Delete(PathUtil.Combine(PathUtil.Combine(srcDir, deletePath)));
                }
            }
            File.WriteAllText(PathUtil.ReplaceExtension(zipPath, ".bytes"), fileListStr.ToString());
        }