zoukankan      html  css  js  c++  java
  • ZIP压缩指定路径

    using Common;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Quartz;
    using Quartz.Impl;
    using StarbucksMessageService.Common; 
    using System;
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Topshelf; 
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;
    using System.Web;
    using ICSharpCode.SharpZipLib.Checksums; 
    namespace StarbucksMessageService
    {
        class Program
        {
            static void Main(string[] args)
            {
                DAL dal = new DAL();
                service ser=new service();
                Console.WriteLine("输入需要导出的分类code");
                //分类Code
                string code = Console.ReadLine();
                if (code == "1")
                {
                    code = "491dc61d999a414f86a4fe16933ce1df";
                }
                DataTable dt = dal.getDataSetfile(code).Tables[0];
                Console.WriteLine("当前文件总数:"+dt.Rows.Count);
                ////导出数量
                //int classifyCount = int.Parse(Console.ReadLine());
                Console.WriteLine("按多少份分别导出?(输入0则导出全部)");
                //部分区间
                int part = int.Parse(Console.ReadLine());
                //获取数据库数据
    
              
                //总数
                int DtCount = dt.Rows.Count;
                //需要分的次数
                  int times =0;
                if (part != 0)
                {
                      times = (DtCount + part - 1) / part;
                }
                string ZipedFile = "/测试ZIP.zip";// "C:\ExportFolder\测试ZIP.zip";
                string path= Path.GetFullPath("../ExportFolder");
                string ZipName = string.Empty;
                var crc = new Crc32();
                MemoryStream ms = new MemoryStream();
                Encoding gb2312 = Encoding.GetEncoding("gb2312"); //对方英文服务器   进行转码
                ICSharpCode.SharpZipLib.Zip.ZipConstants.DefaultCodePage = gb2312.CodePage;
                ZipOutputStream zos = null;
                FileStream fs = null;
                //  byte[] buffer = null;
                System.IO.BinaryReader br = null;
    
                try
                {
    
                    if (dt.Rows.Count > 0)
                    {
                        ////测试数据
                        //DataRow dr1 = dt.NewRow();
                        //for (int d = 0; d < 5000; d++)
                        //{
                        //    dr1["number"] = dt.Rows[5][0].ToString();
                        //    dr1["Emp_Code"] = dt.Rows[5][1].ToString();
                        //    dr1["applicantDeptName"] = dt.Rows[5][2].ToString();
                        //    dr1["serialNumber"] = dt.Rows[5][3].ToString();
                        //    dr1["fileName"] = dt.Rows[5][4].ToString();
                        //    dr1["filePath"] = dt.Rows[5][5].ToString();
                        //    dt.Rows.Add(dr1.ItemArray);
    
                        //}
                      
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            string title = dt.Rows[i]["fileName"].ToString();
                            string houzhui = Path.GetExtension(title);
                            title = Path.GetFileNameWithoutExtension(title);
                            //上海咖啡店_s57155_SJ201904160001(1).jpg
                            string NewName = dt.Rows[i]["applicantDeptName"].ToString() + "_" + dt.Rows[i]["Emp_Code"].ToString() + "_" + dt.Rows[i]["serialNumber"].ToString() + "(" + (i + 1) + ")" + houzhui;
                            dt.Rows[i]["fileName"] = NewName;
                        }
    
                        Logger.Log.Debug("datable总数" + dt.Rows.Count);
                       
                        //part 等于0则直接导出全部
                        if (part == 0)
                        {
                            //判断文件是否存在
                            if (!Directory.Exists(path))
                            {
                                Directory.CreateDirectory(path);
                            }
                            //判断文件是否存在
                            if (File.Exists((path + ZipedFile)))
                            {
                                File.Delete((path + ZipedFile));
                            }
                            zos = new ZipOutputStream(File.Create((path + ZipedFile)));
                            int row = 1;
                            int a = 1;
                            //List<USP_getZIPlist> list = service.ListConvertToModel(dt);
                            ////重命名  店名+店号+单号+流水号
                            //Parallel.ForEach(list, (i) =>
                            //{
                            //    try
                            //    {
                            //        i
                            //        Logger.Log.Debug(i["filePath"].ToString());
                            //        _error = i["fileName"].ToString();
                            //        fs = new FileStream(dr["filePath"].ToString(), System.IO.FileMode.Open);//文件地址、
                            //        // fs = new FileStream(filepath, System.IO.FileMode.Open);//文件地址
                            //        br = new BinaryReader((Stream)fs);
                            //        int size = 1024;
                            //        byte[] buffer = br.ReadBytes(size);
                            //        fs.Seek(size * (row - 1), System.IO.SeekOrigin.Begin);
                            //        ZipEntry entry = new ZipEntry(dr["fileName"].ToString());//文件名
                            //        //ZipEntry entry = new ZipEntry(filename);//文件名
                            //        zos.PutNextEntry(entry);//UTF-8 
                            //        int extractCount = 0;
                            //        while (true)
                            //        {
                            //            size = fs.Read(buffer, 0, buffer.Length);
                            //            if (size > 0)
                            //            {
    
                            //                zos.Write(buffer, 0, size);
                            //                zos.Flush();
                            //            }
                            //            else
                            //            {
                            //                break;
                            //            }
                            //            extractCount += size;
                            //        }
                            //        // zos.Write(buffer, 0, buffer.Length);
                            //    }
                            //    catch (Exception ex)
                            //    {
                            //        throw;
                            //    }
                            //    finally
                            //    {
                            //        if (fs != null) fs.Close();
                            //    }
                            //    Console.WriteLine(a++);
                            //    //row++;
    
                            //});
                            foreach (DataRow dr in dt.Rows)
                            {
                                try
                                {
                                    Logger.Log.Debug(dr["filePath"].ToString());
                                    _error = dr["fileName"].ToString();
                                    if (File.Exists(dr["filePath"].ToString()))
                                    {
                                        fs = new FileStream(dr["filePath"].ToString(), System.IO.FileMode.Open);//文件地址、
    
                                        // fs = new FileStream(filepath, System.IO.FileMode.Open);//文件地址
                                        br = new BinaryReader((Stream)fs);
                                        int size = 1024;
                                        byte[] buffer = br.ReadBytes(size);
                                        fs.Seek(size * (row - 1), System.IO.SeekOrigin.Begin);
                                        ZipEntry entry = new ZipEntry(dr["fileName"].ToString());//文件名
                                        //ZipEntry entry = new ZipEntry(filename);//文件名
                                        zos.PutNextEntry(entry);//UTF-8 
                                        int extractCount = 0;
                                        while (true)
                                        {
                                            size = fs.Read(buffer, 0, buffer.Length);
                                            if (size > 0)
                                            {
    
                                                zos.Write(buffer, 0, size);
                                                zos.Flush();
                                            }
                                            else
                                            {
                                                break;
                                            }
                                            extractCount += size;
                                        }
                                    }
                                    else
                                    {
                                        Console.WriteLine("单号:" + dr["serialNumber"].ToString() + ",文件:" + dr["filePath"].ToString() + ",不存在");
                                    }
                                   // zos.Write(buffer, 0, buffer.Length);
                                }
                                catch (Exception ex)
                                {
                                    throw;
                                }
                                finally
                                {
                                    if (fs != null) fs.Close();
                                }
                                Console.WriteLine("序号:"+a++);
                                //row++;
                            }
                             
                            if (zos != null) zos.Close();
                            
                            //HttpContext.Current.Response.ContentType = "application/octet-stream";
                            //HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(ZipName + ".zip", System.Text.Encoding.UTF8));
                            //HttpContext.Current.Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
                            //HttpContext.Current.Response.BinaryWrite(ms.ToArray());
                            //HttpContext.Current.Response.Flush();
                            // HttpContext.Current.Response.End();
                        }
                        else
                        { 
                            int begin=0;
                            int end=part;
                            int row = 1;
                            int a = 1;
                            //根据次数分别导出ZIP
                            for (int item = 1; item <= times; item++)
                            { 
                                ZipedFile = "/测试ZIP(" + item + ").zip";// "C:\ExportFolder\测试ZIP(" + item + ").zip";
                                //判断文件是否存在
                                if (!Directory.Exists(path))
                                {
                                    Directory.CreateDirectory(path);
                                }
                                //判断文件是否存在
                                if (File.Exists((path + ZipedFile)))
                                {
                                    File.Delete((path + ZipedFile));
                                }
                                zos = new ZipOutputStream(File.Create((path + ZipedFile))); 
                                //每次循环根据固定份数打包 part
                                DataRow [] dRow = dt.Select("number>" + begin + " and number<=" + end + "");
                                foreach (DataRow dr in dRow)
                                {
                                    try
                                    {
                                        Logger.Log.Debug(dr["filePath"].ToString());
                                        _error = dr["fileName"].ToString();
                                        if (File.Exists(dr["filePath"].ToString()))
                                        {
                                            fs = new FileStream(dr["filePath"].ToString(), System.IO.FileMode.Open);//文件地址、
                                            // fs = new FileStream(filepath, System.IO.FileMode.Open);//文件地址
                                            br = new BinaryReader((Stream)fs);
                                            int size = 1024;
                                            byte[] buffer = br.ReadBytes(size);
                                            fs.Seek(size * (row - 1), System.IO.SeekOrigin.Begin);
                                            //byte[] buffer = br.ReadBytes((Int32)fs.Length);
                                            ZipEntry entry = new ZipEntry(dr["fileName"].ToString());//文件名
                                            //ZipEntry entry = new ZipEntry(filename);//文件名
                                            zos.PutNextEntry(entry);//UTF-8 
                                            zos.Write(buffer, 0, buffer.Length);
                                        }
                                        else
                                        {
                                            Console.WriteLine("单号:" + dr["serialNumber"].ToString() + ",文件:" + dr["filePath"].ToString() + ",不存在");
                                        }
                                    }
    
                                    catch (Exception ex)
                                    {
                                        Console.WriteLine("ZIP打包错误" + ex);
                                    }
                                    finally
                                    {
                                        if (fs != null) fs.Close();
                                    }
                                    Console.WriteLine("序号:" + a++);
                                }
                              
                                if (zos != null) zos.Close();
                                
                                //每次循环 加上份数
                                begin=begin+part;
                                end=end+part;
                                
                            }
                        }
                    }
    
                }
                catch (Exception ex)
                {
                    //  context.Response.Write("<script>alert('" + _error + "文件不存在或被另一进程占用,文件下载终止')</script>");
                    Console.WriteLine("ZIP打包错误" + ex);
    
                }
                finally
                {
    
                    if (zos != null) zos.Close();
                    ms.Dispose();
                }
                Console.ReadKey();
            }
    
            public static string _error { get; set; }
        }
    }
  • 相关阅读:
    HDU2586 How far away?(tarjan的LCA)
    You Raise Me Up
    POJ2891 Strange Way to Express Integers(中国剩余定理)
    POJ2142 The Balance(扩展欧几里得)
    HDU 1166模仿大牛写的线段树
    NetWord Dinic
    HDU 1754 线段树裸题
    hdu1394 Minimum Inversion Number
    hdu2795 Billboard
    【完全版】线段树
  • 原文地址:https://www.cnblogs.com/Cjb8973/p/10725478.html
Copyright © 2011-2022 走看看