Beispiel #1
0
        /// <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);            // 对载入的文件进行压缩操作
                }
            }
        }
Beispiel #2
0
        /// <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);
        }