/// <summary> /// 根据给的文件参数,自动进行压缩或解压缩操作 /// </summary> public static void Process(String[] files, String Password = null) { if (files.Length > 0) { if (files.Length == 1 && (files[0].ToLower().EndsWith(".zip") || files[0].ToLower().EndsWith(".rar"))) { unzip(files[0], null, Password, null); // 解压缩 } else { String zipPath = FileTools.getPathNoExt(files[0]) + ".zip"; // 以待压缩的第一个文件命名生成的压缩文件 String BaseDir = FileTools.getParent(files[0]); // 获取第一个文件的父路径信息 if (files.Length == 1) // 若载入的为单个目录,则已当前目录作为基础路径 { String file = files[0]; if (Directory.Exists(file)) { BaseDir = file + "\\"; } } String[] subFiles = FileTools.getSubFiles(files); // 获取args对应的所有目录下的文件列表 zip(zipPath, BaseDir, subFiles, Password, null); // 对载入的文件进行压缩操作 } } }
/// <summary> /// 压缩所有文件files,为压缩文件zipFile, 以相对于BaseDir的路径构建压缩文件子目录,ignoreNames指定要忽略的文件或目录 /// </summary> public static bool zip(String zipPath, String BaseDir, String[] files, String Password = null, String[] ignoreNames = null) { if (files == null || files.Length == 0) { return(false); } if (zipPath == null || zipPath.Equals("")) { zipPath = FileTools.getPathNoExt(files[0]) + ".zip"; // 默认以第一个文件命名压缩文件 } if (BaseDir == null || BaseDir.Equals("")) { BaseDir = FileTools.getParent(files[0]); // 默认以第一个文件的父目录作为基础路径 } Console.WriteLine("所有待压缩文件根目录:" + BaseDir); try { FileTools.mkdirs(FileTools.getParent(zipPath)); // 创建目标路径 Console.WriteLine("创建压缩文件:" + zipPath); FileStream input = null; ZipOutputStream zipStream = new ZipOutputStream(File.Create(zipPath)); if (Password != null && !Password.Equals("")) { zipStream.Password = Password; } files = FileTools.getSubFiles(files); // 获取子目录下所有文件信息 for (int i = 0; i < files.Length; i++) { if (ContainsIgnoreName(files[i], ignoreNames)) { continue; // 跳过忽略的文件或目录 } String entryName = FileTools.relativePath(BaseDir, files[i]); zipStream.PutNextEntry(new ZipEntry(entryName)); Console.WriteLine("添加压缩文件:" + entryName); if (File.Exists(files[i])) // 读取文件内容 { input = File.OpenRead(files[i]); Random rand = new Random(); byte[] buffer = new byte[10240]; int read = 0; while ((read = input.Read(buffer, 0, 10240)) > 0) { zipStream.Write(buffer, 0, read); } input.Close(); } } zipStream.Close(); Console.WriteLine("文件压缩完成!"); return(true); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } return(false); }