zoukankan      html  css  js  c++  java
  • C#压缩指定的文件并生成zip文件

    程序集需要添加的引用是:ICSharpCode.SharpZipLib.dll
    使用实例:
                //执行压缩
    ClsZip.Zip(downZipPath, sourceTopPath, 1, "", allFilePath);
    //执行下载
    ctrlDcAllGrxx.download(downZipPath, true);
    压缩文件的类ClsZip:
       public class ClsZip
        {
    /// <summary>
    /// 生成压缩文件
    /// </summary>
    /// <param name="strZipPath">生成的zip文件的路径,包括文件名</param>
    /// <param name="strSourceTopDirectoryPath">要压缩的源文件的上级目录</param>
    /// <param name="intZipLevel">T压缩等级</param>
    /// <param name="strPassword">压缩包解压密码,不设密码""</param>
    /// <param name="filesOrDirectoriesPaths">源文件路径</param>
    /// <returns></returns>
    public static bool Zip(string strZipPath, string strSourceTopDirectoryPath, int intZipLevel, string strPassword, 
    List<string> filesOrDirectoriesPaths)
    {
    try
    {
    List<string> AllFilesPath = new List<string>();
    if (filesOrDirectoriesPaths.Count > 0) // get all files path
    {
    for (int i = 0; i < filesOrDirectoriesPaths.Count; i++)
    {
    if (File.Exists(filesOrDirectoriesPaths[i]))
    {
    AllFilesPath.Add(filesOrDirectoriesPaths[i]);
    }
    else if (Directory.Exists(filesOrDirectoriesPaths[i]))
    {
    GetDirectoryFiles(filesOrDirectoriesPaths[i], AllFilesPath);
    }
    }
    }
    if (AllFilesPath.Count > 0)
    {
    ZipOutputStream zipOutputStream = new ZipOutputStream(File.Create(strZipPath));
    zipOutputStream.SetLevel(intZipLevel);
    zipOutputStream.Password = strPassword;
    for (int i = 0; i < AllFilesPath.Count; i++)
    {
    string strFile = AllFilesPath[i].ToString();
    try
    {
    if (strFile.Substring(strFile.Length - 1) == "") //folder
    {
    string strFileName = strFile.Replace(strSourceTopDirectoryPath, "");
    if (strFileName.StartsWith(""))
    {
    strFileName = strFileName.Substring(1);
    }
    ZipEntry entry = new ZipEntry(strFileName);
    entry.DateTime = DateTime.Now;
    zipOutputStream.PutNextEntry(entry);
    }
    else //file
    {
    FileStream fs = File.OpenRead(strFile);
    byte[] buffer = new byte[fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    string strFileName = strFile.Replace(strSourceTopDirectoryPath, "");
    if (strFileName.StartsWith(""))
    {
    strFileName = strFileName.Substring(0);
    }
    ZipEntry entry = new ZipEntry(strFileName);
    entry.DateTime = DateTime.Now;
    zipOutputStream.PutNextEntry(entry);
    zipOutputStream.Write(buffer, 0, buffer.Length);
    fs.Close();
    fs.Dispose();
    }
    }
    catch
    {
    continue;
    }
    }
    zipOutputStream.Finish();
    zipOutputStream.Close();
    return true;
    }
    else
    {
    return false;
    }
    }
    catch
    {
    return false;
    }
    }
    /// <summary>
    /// Gets the directory files.
    /// </summary>
    /// <param name="strParentDirectoryPath">源文件路径</param>
    /// <param name="AllFilesPath">所有文件路径</param>
    public static void GetDirectoryFiles(string strParentDirectoryPath, List<string> AllFilesPath)
    {
    string[] files = Directory.GetFiles(strParentDirectoryPath);
    for (int i = 0; i < files.Length; i++)
    {
    AllFilesPath.Add(files[i]);
    }
    string[] directorys = Directory.GetDirectories(strParentDirectoryPath);
    for (int i = 0; i < directorys.Length; i++)
    {
    GetDirectoryFiles(directorys[i], AllFilesPath);
    }
    if (files.Length == 0 && directorys.Length == 0) //empty folder
    {
    AllFilesPath.Add(strParentDirectoryPath);
    }
    }

    }
    
    
    参考:

     ZipOutputStream类(1)

    如果要完成一个文件或文件夹的压缩,则要使用ZipOutputStream类。ZipOutputStream是OutputStream的子类,常用操作方法如表所示。

     ZipOutputStream类的常用方法

    序号

        

    类型

        

    1

    public ZipOutputStream

    (OutputStream out)

    构造

    创建新的ZIP输出流

    2

    public void putNextEntry

    (ZipEntry e) throws IOException

    普通

    设置每一个

    ZipEntry对象

    3

    public void setComment

    (String comment)

    普通

    设置ZIP文件的注释

  • 相关阅读:
    人生感悟:人与人之间的距离
    9月22日测试题目
    Java自学第五十二天
    Java自学第五十一天
    Java自学第五十天
    Java自学第四十九天
    Java自学第四十八天
    Java自学第四十七天
    Java自学第四十六天
    Java自学第四十五天
  • 原文地址:https://www.cnblogs.com/kingangWang/p/2342023.html
Copyright © 2011-2022 走看看