ZipClass zc=new ZipClass (); zc.ZipDir(@"E:\1\新建文件夹", @"E:\1\新建文件夹.zip", 1);//压缩 zc.UnZip(@"E:\1\新建文件夹.zip",@"E:\1\2222");//解压
cs
1 class ZipClass 2 { 3 public void UnZip(string zipFilePath, string unZipDir) 4 { 5 if (zipFilePath == string.Empty) 6 { 7 throw new Exception("压缩文件不能为空!"); 8 } 9 if (!File.Exists(zipFilePath)) 10 { 11 throw new System.IO.FileNotFoundException("压缩文件不存在!"); 12 } 13 //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹 14 if (unZipDir == string.Empty) 15 unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath)); 16 if (!unZipDir.EndsWith("//")) 17 unZipDir += "//"; 18 if (!Directory.Exists(unZipDir)) 19 Directory.CreateDirectory(unZipDir); 20 21 using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath))) 22 { 23 24 ZipEntry theEntry; 25 while ((theEntry = s.GetNextEntry()) != null) 26 { 27 string directoryName = Path.GetDirectoryName(theEntry.Name); 28 string fileName = Path.GetFileName(theEntry.Name); 29 if (directoryName.Length > 0) 30 { 31 Directory.CreateDirectory(unZipDir + directoryName); 32 } 33 if (!directoryName.EndsWith("//")) 34 directoryName += "//"; 35 if (fileName != String.Empty) 36 { 37 using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name)) 38 { 39 40 int size = 2048; 41 byte[] data = new byte[2048]; 42 while (true) 43 { 44 size = s.Read(data, 0, data.Length); 45 if (size > 0) 46 { 47 streamWriter.Write(data, 0, size); 48 } 49 else 50 { 51 break; 52 } 53 } 54 } 55 } 56 } 57 } 58 } 59 60 61 62 public static void ZipDir(string sDir, string sZip, ZipOutputStream s) 63 { 64 string[] filenames = Directory.GetFiles(sDir); 65 string[] dirnames = Directory.GetDirectories(sDir); 66 Crc32 crc = new Crc32(); 67 if (s == null) 68 { 69 s = new ZipOutputStream(File.Create(sZip)); 70 s.SetLevel(6); // 0 - store only to 9 - means best compression 71 } 72 73 74 foreach (string file in filenames) 75 fileZipInStream(file, s); 76 77 foreach (string dir in dirnames) 78 ZipDir(dir, "", s); 79 if (sZip != "") 80 { 81 s.Finish(); 82 s.Close(); 83 84 FileInfo fInfo = new FileInfo(sZip); 85 long size = fInfo.Length; 86 //Log.WriteLogD("----------------" + size.ToString()); 87 if (size < 100) 88 File.Delete(sZip); 89 } 90 } 91 92 }
时间: 2024-10-19 08:53:17