标题 | asp.net C#实现解压缩文件的方法 |
范文 | 易贤网网校上线了! >>>点击进入<<< 网校开发及拥有的课件范围涉及公务员、财会类、外语类、外贸类、学历类、 职业资格类、计算机类、建筑工程类、等9大类考试的在线网络培训辅导。 本文实例讲述了asp.net C#实现解压缩文件的方法。一共给大家介绍了三段代码,一个是简单的解压缩单个zip文件,后一个可以解压批量的大量的但需要调用ICSharpCode.SharpZipLib.dll类了,最后一个比较实例可压缩也可以解压缩了分享给大家供大家参考。具体如下: 解压缩单个文件: 代码如下: using System.IO; using System.IO.Compression; string sourceFile=@"D:2.zip"; string destinationFile=@"D:1.txt"; private const long BUFFER_SIZE = 20480; // make sure the source file is there if (File.Exists ( sourceFile )) { FileStream sourceStream = null; FileStream destinationStream = null; GZipStream decompressedStream = null; byte[] quartetBuffer = null; try { // Read in the compressed source stream sourceStream = new FileStream ( sourceFile, FileMode.Open ); // Create a compression stream pointing to the destiantion stream decompressedStream = new DeflateStream ( sourceStream, CompressionMode.Decompress, true ); // Read the footer to determine the length of the destiantion file quartetBuffer = new byte[4]; int position = (int)sourceStream.Length - 4; sourceStream.Position = position; sourceStream.Read ( quartetBuffer, 0, 4 ); sourceStream.Position = 0; int checkLength = BitConverter.ToInt32 ( quartetBuffer, 0 ); byte[] buffer = new byte[checkLength + 100]; int offset = 0; int total = 0; // Read the compressed data into the buffer while ( true ) { int bytesRead = decompressedStream.Read ( buffer, offset, 100 ); if ( bytesRead == 0 ) break; offset += bytesRead; total += bytesRead; } // Now write everything to the destination file destinationStream = new FileStream ( destinationFile, FileMode.Create ); destinationStream.Write ( buffer, 0, total ); // and flush everyhting to clean out the buffer destinationStream.Flush ( ); } catch ( ApplicationException ex ) { Console.WriteLine(ex.Message, "解压文件时发生错误:"); } finally { // Make sure we allways close all streams if ( sourceStream != null ) sourceStream.Close ( ); if ( decompressedStream != null ) decompressedStream.Close ( ); if ( destinationStream != null ) destinationStream.Close ( ); } } 批量解压缩(这需要调用一个解压缩类库。。 ICSharpCode.SharpZipLib.dll) 代码如下: using System; using System.IO; using System.Collections.Generic; using System.Text; using ICSharpCode.SharpZipLib.Zip; namespace ZipLib { /// <summary> /// 解压缩类 /// </summary> public static class ZIP { /// <summary> /// 解压ZIP文件包 /// </summary> /// <param name="strZipFile">ZIP文件路径</param> /// <param name="strDir">解压后的文件目录路径</param> /// <returns>是否解压成功</returns> public static bool unzipFiles(string strZipFile, string strDir) { //判断ZIP文件是否存在 if (File.Exists(strZipFile)) { //判断目录是否存在 bool bUnzipDir = false; //判断是否需要创建目录 if (!Directory.Exists(strDir)) bUnzipDir = (Directory.CreateDirectory(strDir) != null); else bUnzipDir = true; //如果解压目录存在 if (bUnzipDir) { //获得ZIP数据流 ZipInputStream zipStream = new ZipInputStream(File.OpenRead(strZipFile)); if (zipStream != null) { ZipEntry zipEntry = null; while ((zipEntry = zipStream.GetNextEntry()) != null) { string strUnzipFile = strDir + "//" + zipEntry.Name; string strFileName = Path.GetFileName(strUnzipFile); string strDirName = Path.GetDirectoryName(strUnzipFile); //是否为解压目录 if (!string.IsNullOrEmpty(strDirName)) Directory.CreateDirectory(strDirName); //是否为解压文件 if (!string.IsNullOrEmpty(strFileName)) { //解压文件 FileStream unzipFileStream = new FileStream(strUnzipFile, FileMode.Create); if (unzipFileStream != null) { byte[] buf = new byte[2048]; int size = 0; while ((size = zipStream.Read(buf, 0, 2048)) > 0) unzipFileStream.Write(buf, 0, size); //关闭Stream unzipFileStream.Flush(); unzipFileStream.Close(); } } } //关闭ZIP流 zipStream.Close(); //返回值 return true; } } } return false; } } } |
随便看 |
|
在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。