`
bailangfei3344
  • 浏览: 43745 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

文件的压缩与解压

阅读更多

压缩(ProgressBar pbFile是进度条控件)

public static void ZipFile(string strFile, string strZip, ProgressBar pbFile)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
                strFile += Path.DirectorySeparatorChar;
            ZipOutputStream s = new ZipOutputStream(File.Create(strZip));
            s.SetLevel(6);
            zip(strFile, s, strFile, pbFile);
            s.Finish();
            s.Close();
        }


        private static void zip(string strFile, ZipOutputStream s, string staticFile, ProgressBar pbFile)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar;
            Crc32 crc = new Crc32();
            string[] filenames = Directory.GetFileSystemEntries(strFile);
            foreach (string file in filenames)
            {
                if (Directory.Exists(file))
                {
                    zip(file, s, staticFile, pbFile);
                }
                else // 否则直接压缩文件
                {
                    //打开压缩文件
                    FileStream fs = File.OpenRead(file);

                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
                    ZipEntry entry = new ZipEntry(tempfile);

                    entry.DateTime = DateTime.Now;
                    entry.Size = fs.Length;
                    fs.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    s.PutNextEntry(entry);

                    s.Write(buffer, 0, buffer.Length);
                    pbFile.Increment(filenames.Length + 1);
                }
            }
        }

 解压(ProgressBar pbFile是进度条控件)

 public static string unZipFile(string TargetFile, string fileDir, ProgressBar pbFile)
        {
            string rootFile = " ";
            try
            {
                //读取压缩文件(zip文件),准备解压缩
                ZipInputStream s = new ZipInputStream(File.OpenRead(TargetFile.Trim()));
                
                ZipEntry theEntry;
                string path = fileDir;
                //解压出来的文件保存的路径

                string rootDir = " ";
                //根目录下的第一个子文件夹的名称
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    rootDir = Path.GetDirectoryName(theEntry.Name);
                    //得到根目录下的第一级子文件夹的名称
                    if (rootDir.IndexOf("\\") >= 0)
                    {
                        rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1);
                    }
                    string dir = Path.GetDirectoryName(theEntry.Name);
                    //根目录下的第一级子文件夹的下的文件夹的名称
                    string fileName = Path.GetFileName(theEntry.Name);
                    //根目录下的文件名称
                    if (dir != " ")
                    //创建根目录下的子文件夹,不限制级别
                    {
                        if (!Directory.Exists(fileDir + "\\" + dir))
                        {
                            path = fileDir + "\\" + dir;
                            //在指定的路径创建文件夹
                            Directory.CreateDirectory(path);
                        }
                    }
                    else if (dir == " " && fileName != "")
                    //根目录下的文件
                    {
                        path = fileDir;
                        rootFile = fileName;
                    }
                    else if (dir != " " && fileName != "")
                    //根目录下的第一级子文件夹下的文件
                    {
                        if (dir.IndexOf("\\") > 0)
                        //指定文件保存的路径
                        {
                            path = fileDir + "\\" + dir;
                        }
                    }

                    if (dir == rootDir)
                    //判断是不是需要保存在根目录下的文件
                    {
                        path = fileDir + "\\" + rootDir;
                    }

                    //以下为解压缩zip文件的基本步骤
                    //基本思路就是遍历压缩文件里的所有文件,创建一个相同的文件。
                    if (fileName != String.Empty)
                    {
                        FileStream streamWriter = File.Create(path + "\\" + fileName);

                        int size = 2048;
                        byte[] data = new byte[2048];
                        while (true)
                        {
                            size = s.Read(data, 0, data.Length);
                            if (size > 0)
                            {
                                streamWriter.Write(data, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        }

                        streamWriter.Close();
                    }
                    pbFile.Increment(rootDir.Length+1);
                }
                s.Close();

                return rootFile;
            }
            catch (Exception ex)
            {
                return "1; " + ex.Message;
            }
        }
 转载......
分享到:
评论

相关推荐

    文件压缩与解压

    在IT领域,文件压缩与解压是日常工作中常见的操作,特别是在数据传输、存储优化和软件分发时。这里我们主要探讨基于香农编码的文件压缩与解压技术,以及使用C语言实现的相关知识。 首先,香农编码是信息论中的一个...

    实现java文件压缩与解压

    ### 实现Java文件压缩与解压 #### 一、引言 在计算机科学领域,文件压缩与解压是一项非常实用的技术。它不仅能够减少文件占用的空间,提高存储效率,还能加速文件在网络中的传输速度。Java作为一种广泛使用的编程...

    文件压缩与解压(哈夫曼编码)

    下面我们将深入探讨哈夫曼编码的工作原理、构建过程以及在文件压缩与解压中的应用。 1. 哈夫曼编码工作原理: 哈夫曼编码的核心思想是“频繁的字符用短码,不频繁的字符用长码”。它基于贪心算法,通过构建一棵特殊...

    文件压缩与解压C++

    在IT行业中,文件压缩与解压是常见的数据处理任务,特别是在C++编程环境中。C++是一种强大而灵活的编程语言,能够实现各种复杂的算法和功能,包括文件的压缩和解压。下面我们将深入探讨C++如何实现文件压缩与解压,...

    基于哈夫曼树的文件压缩和解压(QT可视化界面)

    《基于哈夫曼树的文件压缩与解压技术在QT可视化界面中的实现》 哈夫曼编码是一种数据压缩算法,其核心是构建哈夫曼树,通过对数据出现频率的统计,构建出一棵特殊的二叉树——哈夫曼树,使得出现频率高的字符具有较...

    Android智能手机文件压缩与解压源码

    本源码示例提供了Android智能手机上的文件压缩与解压功能,帮助开发者理解和实现这一功能。下面我们将深入探讨Android中如何进行文件的压缩与解压。 首先,Android系统基于Linux内核,因此它支持标准的Unix档案格式...

    C#实现文件压缩与解压的方法示例【ZIP格式】

    本文实例讲述了C#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下: 在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成...

    多文件压缩与解压程序 实验报告

    1. 分析给出的多文件打包/解包程序MyZip和单文件压缩程序Compress,将程序MyZip改写为一个能够处理多文件压缩/解压的控制台程序,可利用命令行参数控制其完成如下功能: 1. 将命令行参数指定的一组文件压缩为一个...

    在C#中调用Winrar实现文件压缩与解压源代码

    总的来说,在C#中调用WinRAR实现文件压缩与解压涉及到对WinRAR API的深入理解,以及熟练运用C#的DllImport特性进行平台调用。通过合理封装和错误处理,可以构建出稳定可靠的文件压缩和解压功能。

    Java哈夫曼编码的文件的压缩与解压.docx

    本文将围绕Java实现哈夫曼编码的文件压缩与解压进行详细解析。 首先,我们看到`main`方法调用了`zipFile`和`unZipFile`两个静态方法,分别用于文件的压缩和解压缩操作。`zipFile`方法接收源文件路径和目标压缩文件...

    zlib文件压缩与解压

    zlib文件压缩与解压

    用哈弗曼编码对文件进行压缩与解压

    通过对哈弗曼编码原理及其在文件压缩与解压中的应用进行深入剖析,我们了解到这是一种非常有效的无损压缩算法。通过构建哈弗曼树和生成编码表,可以显著减少文件的存储空间,提高数据传输效率。此外,通过计算压缩...

    Huffma1n编码与解码实现文件压缩与解压..docx

    ..Huffma1n编码与解码实现文件压缩与解压..docx

    Huffma1n编码与解码实现文件压缩与解压..pdf

    ..Huffma1n编码与解码实现文件压缩与解压..pdf

    用哈夫曼算法实现字符型文件压缩与解压(实验报告)

    用哈夫曼算法实现字符型文件压缩与解压,采用C语言实现,友好界面,适合初学者参考和模仿。 适合作为数据结构与算法分析的实验对象。

    哈夫曼树实现文件压缩和解压(源程序+实验报告)

    利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 (3) D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,...

    基于OpenMP的文件压缩与解压的并行设计模型 (2014年)

    在多核环境下,对文件压缩与解压并行算法进行研究,提出一种基于OpenMP的文件压缩处理并行设计模型。该模型由查找热点代码、并行化分析、并行建模、实现、调试等步骤组成。以动态哈夫曼算法为研究算法,将多核压缩...

    文件压缩解压.rar

    文件压缩与解压是计算机操作中的常见任务,它涉及到数据存储和传输的效率问题。本文将深入探讨这一主题,从基本概念、常见的压缩格式、压缩原理到如何进行压缩与解压,以及相关的实用工具。 首先,文件压缩是为了...

    实现文件的压缩与解压.rar( VC++ 源代码)

    在IT行业中,文件压缩与解压是常见的操作,特别是在软件开发、数据传输和存储优化等领域。这个名为"实现文件的压缩与解压.rar"的压缩包包含了一个VC++的源代码示例,它展示了如何利用C++编程语言来实现文件的压缩与...

Global site tag (gtag.js) - Google Analytics