之前都是想到用Process直接呼叫壓縮程式直接壓縮就好了
不過有印象還是有其他的方式
就找了一點人家寫的東東......
找到了下面這二個
DotNetZip :http://www.codeplex.com/DotNetZip
我抓的時候是1.9版了.....裡面包了範例等等的東西
SharpZip :http://www.icsharpcode.net/OpenSource/SharpZipLib/
直接DownLoadDLL應該就可以了不然裡面也是有範例程式
第一種方式如下:
protected void Button3_Click(object sender, EventArgs e) { MyZipFile(); //壓縮後直接下載檔案 FileStream fileStream = new FileStream("D:\\DotNetZip.zip", FileMode.Open); long fileSize = fileStream.Length; Response.ContentType = "application/zip"; Response.AddHeader("Content-Disposition", "attachment; filename=DotNetZip.zip"); Response.AddHeader("Content-Length", fileSize.ToString()); byte[] fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); Response.BinaryWrite(fileBuffer); Response.End(); } //壓縮 private void MyZipFile() { string path = HttpContext.Current.Request.MapPath("Zip"); IEnumerable filelist = GetFiles(path); var files = from f in filelist where f.Extension == ".bat" select f; //DotNetZip壓縮輸出檔案 if (files.Count() > 0) { using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile(System.Text.Encoding.Default)) { zip.Password = "123456!"; foreach (var f in files) { zip.AddFile(f.FullName, ""); } zip.Save("D:\\DotNetZip.zip"); zip.Dispose(); } } } //取得檔案 private static IEnumerable GetFiles(string path) { string[] filenames = null; List files = new List(); filenames = System.IO.Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories); foreach (string name in filenames) { files.Add(new System.IO.FileInfo(name)); } return files; } //解壓縮 protected void Button4_Click(object sender, EventArgs e) { MyUnZipFile(); } private void MyUnZipFile() { using (Ionic.Zip.ZipFile DotZip = Ionic.Zip.ZipFile.Read("D:\\DotNetZip.zip", System.Text.Encoding.Default)) { DotZip.Password = "123456!"; DotZip.ExtractAll("D:\\"); } }
第二種方式如下:
//取得專案路徑Zip目錄下所有含子目錄的檔案 private List GetFiles() { List lstFileInfo = new List(); string dir = Server.MapPath("Zip"); FileInfo info; string[] files; //取得dir下所有的檔案子目錄下的檔案 files = Directory.GetFiles(dir,"*.*",System.IO.SearchOption.AllDirectories); foreach (string item in files) { info = new FileInfo(item); //取得今天被寫入的檔案 //if (info.LastWriteTime.ToString("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd")) //{ lstFileInfo.Add(info); //} } return lstFileInfo; } //DotNetZip的壓縮方式 protected void btnDotNetZip_Click(object sender, EventArgs e) { //DotNetZip壓縮輸出檔案 List lstSelected = GetFiles(); if (lstSelected.Count > 0) { Response.Clear(); Response.ContentType = "application/zip"; Response.AddHeader("content-disposition", "filename=" + "DotNetZip.zip"); using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile(System.Text.Encoding.Default)) { foreach (FileInfo file in lstSelected) { zip.AddFile(file.FullName, ""); } zip.Save(Response.OutputStream); zip.Dispose(); } Response.End(); } } //SharpZip的壓縮方式 protected void btnSharpZip_Click(object sender, EventArgs e) { //SharpZip壓縮輸出檔案 List lstSelected = GetFiles(); if (lstSelected.Count > 0) { Response.Clear(); Response.ContentType = "application/zip"; Response.AddHeader("content-disposition", "filename=" + "SharpZip.zip"); using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zip = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(Response.OutputStream)) { foreach (FileInfo file in lstSelected) { AddZipEntry(zip,"", file.FullName); } zip.Finish(); zip.IsStreamOwner = false;// 避免 stream 被 zip 物件關閉 } Response.End(); } } //SharpZip private static void AddZipEntry(ICSharpCode.SharpZipLib.Zip.ZipOutputStream zip, string folder, string filename) { if (System.IO.Directory.Exists(filename) == true) { System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(filename); string folder_ = folder + di.Name + "/"; ICSharpCode.SharpZipLib.Zip.ZipEntry zFolder = new ICSharpCode.SharpZipLib.Zip.ZipEntry(folder_); zip.PutNextEntry(zFolder); foreach (System.IO.DirectoryInfo d in di.GetDirectories()) AddZipEntry(zip, folder_, d.FullName); foreach (System.IO.FileInfo f in di.GetFiles()) AddZipEntry(zip, folder_, f.FullName); } else if (System.IO.File.Exists(filename) == true) { // File zip.SetLevel(9); using (System.IO.FileStream fs = System.IO.File.OpenRead(filename)) { byte[] b = new byte[fs.Length]; fs.Read(b, 0, b.Length); ICSharpCode.SharpZipLib.Zip.ZipEntry z = new ICSharpCode.SharpZipLib.Zip.ZipEntry(folder + new System.IO.FileInfo(filename).Name); zip.PutNextEntry(z); zip.Write(b, 0, b.Length); } } }
第三種方式如下:
protected void Button1_Click(object sender, EventArgs e) { //壓縮 ZipFiles("D:\\Zip","D:\\ICSharp.zip","12345"); //解壓縮 UnZipFiles("D:\\ICSharp.zip","D:\\","12345"); } //壓縮 public static void ZipFiles(string FolderPath, string PathAndFile, string password) { //讀取檔案 ArrayList ar = GetFileList(FolderPath); int TrimLength = (Directory.GetParent(FolderPath)).ToString().Length; TrimLength += 1; FileStream ostream; byte[] obuffer; ICSharpCode.SharpZipLib.Zip.ZipOutputStream oZipStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(File.Create(PathAndFile)); if (password != null && password != String.Empty) oZipStream.Password = password; oZipStream.SetLevel(9); ICSharpCode.SharpZipLib.Zip.ZipEntry oZipEntry; foreach (string Fil in ar) { oZipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(Fil.Remove(0, TrimLength)); oZipStream.PutNextEntry(oZipEntry); if (!Fil.EndsWith(@"/")) { ostream = File.OpenRead(Fil); obuffer = new byte[ostream.Length]; ostream.Read(obuffer, 0, obuffer.Length); oZipStream.Write(obuffer, 0, obuffer.Length); } } oZipStream.Finish(); oZipStream.Close(); } //取得檔案(包含所有子目錄及子目錄下的檔案) private static ArrayList GetFileList(string Dir) { ArrayList fils = new ArrayList(); bool Empty = true; foreach (string file in Directory.GetFiles(Dir)) { fils.Add(file); Empty = false; } if (Empty) { if (Directory.GetDirectories(Dir).Length == 0) fils.Add(Dir + @"/"); } foreach (string dirs in Directory.GetDirectories(Dir)) { foreach (object obj in GetFileList(dirs)) { fils.Add(obj); } } return fils; } //解壓縮 public static void UnZipFiles(string zipPathAndFile, string outputFolder, string password) { ICSharpCode.SharpZipLib.Zip.ZipInputStream s = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(File.OpenRead(zipPathAndFile)); if (password != null && password != String.Empty) s.Password = password; ICSharpCode.SharpZipLib.Zip.ZipEntry theEntry; string tmpEntry = String.Empty; while ((theEntry = s.GetNextEntry()) != null) { string directoryName = outputFolder; string fileName = Path.GetFileName(theEntry.Name); if (directoryName != "") { Directory.CreateDirectory(directoryName); } if (fileName != String.Empty) { if (theEntry.Name.IndexOf(".ini") < 0) { string fullPath = directoryName + "\\" + theEntry.Name; fullPath = fullPath.Replace("\\ ", "\\"); string fullDirPath = Path.GetDirectoryName(fullPath); if (!Directory.Exists(fullDirPath)) Directory.CreateDirectory(fullDirPath); FileStream streamWriter = File.Create(fullPath); 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(); } } } s.Close(); }
參考:http://richielin-programer.blogspot.com/2008/04/c-sharpzip.html
全站熱搜
留言列表