private static void BuildZipArchiveObject(ZipOutputStream zip, string assetPath, ZipArchiveManifestEntry archiveEntry) { var fi = new FileInfo(assetPath); var name = ZipEntry.CleanName(assetPath); var entry = new ZipEntry(name) { DateTime = fi.LastWriteTimeUtc, Size = fi.Length }; // entry.Comment = ""; zip.PutNextEntry(entry); using (var fs = fi.OpenRead()) { var buf = new byte[1024 * 128]; do { var read = fs.Read(buf, 0, buf.Length); if (read <= 0) { break; } zip.Write(buf, 0, read); } while (true); } zip.CloseEntry(); archiveEntry.assets.Add(assetPath); }
//TODO: zip 打包拆包 public static ZipArchiveManifest BuildZipArchives(PackageBuildInfo buildInfo, List <ZipArchiveBuild> builds) { var manifest = new ZipArchiveManifest(); foreach (var build in builds) { var entry = new ZipArchiveManifestEntry() { name = build.name, }; manifest.archives.Add(entry); var zipArchiveFileName = Path.Combine(buildInfo.zipArchivePath, entry.name); if (File.Exists(zipArchiveFileName)) { File.Delete(zipArchiveFileName); } using (var zip = new ZipOutputStream(File.Open(zipArchiveFileName, FileMode.Create, FileAccess.Write, FileShare.Write))) { zip.IsStreamOwner = true; foreach (var assetPath in build.assetPaths) { BuildZipArchiveObject(zip, assetPath, entry); } } } return(manifest); }