压缩文件

  public static  string filesdirectorypath = @"D:\文件夹1";
    public static int dirnamelength = 0;

        protected void Page_Load(object sender, EventArgs e)
    {
       ZipFileCreate();
   }



#region -  ZipFileCreate(); -
   /// <summary>   
    /// 压缩文件的方法   
    /// </summary>   
    public void ZipFileCreate()
    {     
       
        ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(@"D:\1.rar"));
        zipoutputstream.SetLevel(1);
        Crc32 crc = new Crc32();
        Hashtable fileList = this.getAllFies();
        foreach (DictionaryEntry item in fileList)
        {
            FileStream fs = File.OpenRead(item.Key.ToString());
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(filesdirectorypath.Length - dirnamelength));
            entry.DateTime = (DateTime)item.Value;
            entry.Size = fs.Length;
            fs.Close();
            crc.Reset();
            crc.Update(buffer);
            entry.Crc = crc.Value;
            zipoutputstream.PutNextEntry(entry);
            zipoutputstream.Write(buffer, 0, buffer.Length);
        }
        zipoutputstream.Finish();
        zipoutputstream.Close();
    }

    /// <summary>   
    /// 获取所有文件   
    /// </summary>   
    /// <returns></returns>   
    private Hashtable getAllFies()
    {
        Hashtable FilesList = new Hashtable();
        DirectoryInfo fileDire = new DirectoryInfo(filesdirectorypath);
        if (!fileDire.Exists)
        {
            throw new System.IO.FileNotFoundException("目录:" + fileDire.FullName + "没有找到!");
        }
        dirnamelength = fileDire.Name.Length;
        this.getAllDirFiles(fileDire, FilesList);
        this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);
        return FilesList;
    }

    /// <summary>   
    /// 获取一个文件夹下的所有文件夹里的文件   
    /// </summary>   
    /// <param name="dirs"></param>   
    /// <param name="filesList"></param>   
    private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)
    {
        foreach (DirectoryInfo dir in dirs)
        {
            foreach (FileInfo file in dir.GetFiles("*.*"))
            {
                filesList.Add(file.FullName, file.LastWriteTime);
            }
            this.getAllDirsFiles(dir.GetDirectories(), filesList);
        }
    }

    /// <summary>   
    /// 获取一个文件夹下的文件   
    /// </summary>   
    /// <param name="strDirName">目录名称</param>   
    /// <param name="filesList">文件列表HastTable</param>   
    private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)
    {
        foreach (FileInfo file in dir.GetFiles("*.*"))
        {
            filesList.Add(file.FullName, file.LastWriteTime);
        }
    }
#endregion

posted on 2012-05-02 12:16  lei0515  阅读(178)  评论(0)    收藏  举报

导航