手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >asp.net SharpZipLib的压缩与解压问题
asp.net SharpZipLib的压缩与解压问题
摘要:我使用SharpZipLib.dll中遇到的问题是:利用SharpZipLib压缩后生成的*.rar文件,利用其可以正常解压,但如果使用文件...

我使用SharpZipLib.dll中遇到的问题是:利用SharpZipLib压缩后生成的*.rar文件,利用其可以正常解压,但如果使用文件右击压缩生成的*.RAR文件,在解压过程中出错,具体报错信息:Wrong Local header signature: 0x21726152 ;但*.zip文件可正常解压。

具体压缩、解压代码实现参照网络上的代码,贴出概要代码:

复制代码 代码如下:

/// <summary>

/// 压缩文件

/// </summary>

/// <param name="sourceFilePath">源文件路径</param>

/// <param name="destinationPath">压缩文件后的保存路径</param>

/// <returns>压缩是否成功</returns>

public bool Compress(string sourceFilePath, string destinationPath)

{

try

{

string[] filenames = Directory.GetFiles(sourceFilePath);

using (ZipOutputStream zs = new ZipOutputStream(File.Create(destinationPath)))

{

zs.SetLevel(9);

byte[] buffer = new byte[4096];

foreach (string file in filenames)

{

ZipEntry entry = new ZipEntry(Path.GetFileName(file));

entry.DateTime = DateTime.Now;

zs.PutNextEntry(entry);

using (FileStream fs = File.OpenRead(file))

{

int sourceBytes;

do

{

sourceBytes = fs.Read(buffer, 0, buffer.Length);

zs.Write(buffer, 0, sourceBytes);

}

while (sourceBytes > 0);

}

}

zs.Finish();

zs.Flush();

zs.Close();

}

}

catch (Exception)

{

return false;

}

return true;

} public bool DeCompress(string sourceFilePath, string destinationPath)

{

try

{

using (ZipInputStream zs = new ZipInputStream(File.OpenRead(sourceFilePath)))

{

ZipEntry entry = null;

//解压缩*.rar文件运行至此处出错:Wrong Local header signature: 0x21726152,解压*.zip文件不出错

while ((entry = zs.GetNextEntry()) != null)

{

string directoryName = Path.GetDirectoryName(entry.Name);

string fileName = Path.GetFileName(entry.Name);

if (!string.IsNullOrEmpty(fileName))

{

using (FileStream streamWriter = File.Create(destinationPath + entry.Name))

{

int size = 2048;

byte[] data = new byte[size];

while (true)

{

size = zs.Read(data, 0, data.Length);

if (size > 0)

{

streamWriter.Write(data, 0, size);

}

else

{

break;

}

}

}

}

}

}

}

catch (System.Exception)

{

return false;

}

return true;

}

如果需解压*.rar的压缩文件在网络也可以找到相关的实现代码,概要代码:

复制代码 代码如下:

public bool DeCompressRAR(string sourceFilePath, string destinationPath)

{

try

{

string SeverDir = @"D:Program FilesWinRAR";//rar.exe的要目录

Process ProcessDecompression = new Process();

ProcessDecompression.StartInfo.FileName = SeverDir + "rar.exe";

Directory.CreateDirectory(sourceFilePath);

ProcessDecompression.StartInfo.Arguments = " X " + sourceFilePath + " " + destinationPath;

ProcessDecompression.Start();

while (!ProcessDecompression.HasExited)

{

//nothing to do here.

}

return true;

}

catch (System.Exception)

{

return false;

}

}

我本想利用FileUpload控件将上传的压缩文件解压后保存至相对应的目录并更新数据库文件目录,后发现一些较好的用于上传的开源软件:如NeatUpload,SWFUpload可以较方便的实现我的需求,遂没有过多纠缠于SharpZipLib,可能关于SharpZipLib的压缩与解压有其它用法,不能被我误导,以上代码是从网络上整合出来的,因为它太过于重复和散乱。

【asp.net SharpZipLib的压缩与解压问题】相关文章:

asp.net querystring乱码解决方法

asp.net Repeater中使用if的代码

asp.net 2.0 中的URL重写以及urlMappings问题

asp.net中C++单例实现问题分析

asp.net输出重写压缩页面文件实例代码

asp.net jscript 一句话木马

asp.net SqlDataReader绑定Repeater

asp.net中eval不能定义变量的问题的解决方法

axp.net ScriptManager的简单用法

asp.net下用DataSet生成XML的问题

精品推荐
分类导航