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; } } }