读取Zip文件内容

第一步,上次文件并保存到服务器目录下

   /// <summary>
    /// 上传压缩文件
    /// </summary>
    protected void UploadZip()
    {
        //定义上传文件暂存目录
        string uploadDic = @"C:\Test\";
        //判断是否选择文件
        if (FileUpload1.FileName.Length > 0)
        {
            //判断文件格式
            if (FileUpload1.FileName.EndsWith(".zip"))
            {
                //判断上传文件目录是否存在
                if (!Directory.Exists(uploadDic))
                {
                    //不存在则创建该目录
                    Directory.CreateDirectory(uploadDic);
                }
                //在服务器上存储压缩文件
                FileUpload1.SaveAs(uploadDic + FileUpload1.FileName);
                UnpackZip(uploadDic + FileUpload1.FileName, uploadDic + FileUpload1.FileName.Substring(0, FileUpload1.FileName.Length - 4) + @"\");
            }
        }
    }

第二步,解压该文件并创建临时文件目录,需引用外部组件ICSharpCode.SharpZipLib.dll

    /// <summary>
    /// 解压文件
    /// </summary>
    /// <param name="zipDir">压缩文件目录</param>
    /// <param name="fileDir">解压目录</param>
    /// <returns></returns>
    protected void UnpackZip(string zipDir, string fileDir)
    {
        try
        {
            //创建解压文件目录
            if (!Directory.Exists(fileDir))
            {
                Directory.CreateDirectory(fileDir);
            }
            //创建Zip输出流
            ZipInputStream zipStream = new ZipInputStream(File.OpenRead(zipDir));
            ZipEntry theEntry;
            //逐级打开压缩文件
            while ((theEntry = zipStream.GetNextEntry()) != null)
            {
                //获取打开目录的名称
                string dirName = Path.GetDirectoryName(theEntry.Name);
                //获取文件的名称
                string fileName = Path.GetFileName(theEntry.Name);
                if (dirName != String.Empty)
                {
                    //根据目录名称创建新的目录
                    Directory.CreateDirectory(fileDir + dirName);
                }
                if (fileName != String.Empty)
                {
                    //写入文件内容
                    FileStream fileSteam = File.Create(fileDir + theEntry.Name);
                    int size = 2048;
                    byte[] data = new byte[size];
                    while (true)
                    {
                        size = zipStream.Read(data, 0, data.Length);
                        if (size > 0)
                        {
                            fileSteam.Write(data, 0, size);
                        }
                        else
                        {
                            break;
                        }
                    }
                    fileSteam.Close();
                }
            }
            zipStream.Close();
            //读取解压文件
            ReadDirectory(fileDir);
            //删除解压目录
            DeleteTempDirectory(fileDir);
        }
        catch (Exception e)
        {
            throw new IOException("文件内容异常"+e.Message);
        }
    }

第三步,读取临时文件内容

    /// <summary>
    /// 读取解压文件内容
    /// </summary>
    /// <param name="fileDir">解压目录</param>
    protected void ReadDirectory(string fileDir)
    {
        //获取解压文件下所有文件
        string[] files = Directory.GetFiles(fileDir);
        if (files.Count() > 0)
        {
            //循环获取文件
            foreach (string file in files)
            {
                //如果是XML则
                //XmlDocument doc = new XmlDocument();
                //doc.Load(file);

                //获取单个文件
                Directory.GetFiles(file);
                //读取文件进行数据处理...
            }
        }
    }

第四步,删除临时目录

    /// <summary>
    /// 删除临时解压目录
    /// </summary>
    /// <param name="fileDir"></param>
    protected void DeleteTempDirectory(string fileDir)
    {
        if (Directory.Exists(fileDir))
        {
            //删除该目录及该目录下的所有文件
            Directory.Delete(fileDir, true);
        }
    }

 

转载于:https://www.cnblogs.com/qinming/p/4000689.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值