asp.net C#实现解压缩文件的方法
来源: 阅读:806 次 日期:2014-11-02 10:07:23
温馨提示: 小编为您整理了“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;

}

}

}

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map