步骤
)先引用 ICSharpCode SharpZipLib dll
) cs文件引入
using System IOusing System Text
using ICSharpCode SharpZipLib Checksumsusing ICSharpCode SharpZipLib Zipusing ICSharpCode SharpZipLib GZip
)代码
#region 下列代码为压缩并下载代码 ZipOutputStream zos = null String strBaseDir = ""
void dlZipDir(string strPath string strFileName) { MemoryStream ms = null Response ContentType = "application/octet stream" strFileName = HttpUtility UrlEncode(strFileName) Replace( + ) Response AddHeader("Content Disposition" "attachment filename=" + strFileName + " zip") ms = new MemoryStream() zos = new ZipOutputStream(ms) strBaseDir = strPath + "" addZipEntry(strBaseDir) zos Finish() zos Close() Response Clear() Response BinaryWrite(ms ToArray()) Response End() }
void addZipEntry(string PathStr) { DirectoryInfo di = new DirectoryInfo(PathStr) foreach (DirectoryInfo item in di GetDirectories()) { addZipEntry(item FullName) } foreach (FileInfo item in di GetFiles()) { FileStream fs = File OpenRead(item FullName) byte[] buffer = new byte[fs Length] fs Read(buffer buffer Length) string strEntryName = item FullName Replace(strBaseDir "") ZipEntry entry = new ZipEntry(strEntryName) zos PutNextEntry(entry) zos Write(buffer buffer Length) fs Close() } }
PRotected void Button _Click(object sender EventArgs e) { string userPath ="D:华海实训(qqview )各级账号和密码" dlZipDir(userPath "华海实训(qqview )服务账号")
}
#endregion
lishixinzhi/Article/program/net/201311/14232百度知道
压缩包是一串代码怎么用
傅疏04c
超过20用户采纳过TA的回答
关注
成为第1位粉丝
:
1.压缩文件
首先选中需要进行压缩的文件或文件夹,然后点击鼠标右键,选择“发送到→压缩(zippde)文件夹”命令,便可自动将文件或文件夹进行压缩了。
2.解压缩文件
在解压缩文件夹时,我们可以选中压缩包,然后点击鼠标右键,选择“全部提取”命令选项。在出现的提取向导中点击“下一步”按钮,在出现的对话框中点击“浏览”按钮为解压缩文件选择存放路径,点击“下一步”按钮便可完成解压 *** 作。
但是,如果只想单独对压缩包中的部分文件进行解压缩又该如何 *** 作呢?
只要双击打开压缩包,选中需要解压的文件,然后将它直接拖放到其他文件夹中即可完成解压。同时,在此次 *** 作中,你还可以直接对压缩包中的文件进行剪切、复制等 *** 作。
如果你下的压缩包是加密的,解压时把密码输进去就ok了
我在使用这个组件行,遇到了一个问题。当压缩小文件时没有什么错误,一旦源文件达到150M时,它会让你的机器垮掉。(至少是我的机器)
为什么会这样,因为如果源文件是150M时,你就需要在内存申请一个150M大小的字节数组。好点的机器还没问题,一般的机器可就惨了。如果文件在大的话,好机器也受不了的。
为了解决大文件压缩的问题,可以使用分段压缩的方法。
private string CreateZIPFile(string path,int M)
{
try
{
Crc32 crc = new Crc32()
ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipout=new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(System.IO.File.Create(path+".zip"))
System.IO.FileStream fs=System.IO.File.OpenRead(path)
long pai=1024*1024*M//每M兆写一次
long forint=fs.Length/pai+1
byte[] buffer=null
ZipEntry entry = new ZipEntry(System.IO.Path.GetFileName(path))
entry.Size = fs.Length
entry.DateTime = DateTime.Now
zipout.PutNextEntry(entry)
for(long i=1i<=forinti++)
{
if(pai*i<fs.Length)
{
buffer = new byte[pai]
fs.Seek(pai*(i-1),System.IO.SeekOrigin.Begin)
}
else
{
if(fs.Length<pai)
{
buffer = new byte[fs.Length]
}
else
{
buffer = new byte[fs.Length-pai*(i-1)]
fs.Seek(pai*(i-1),System.IO.SeekOrigin.Begin)
}
}
fs.Read(buffer,0,buffer.Length)
crc.Reset()
crc.Update(buffer)
zipout.Write(buffer,0, buffer.Length)
zipout.Flush()
}
fs.Close()
zipout.Finish()
zipout.Close()
System.IO.File.Delete(path)
return path+".zip"
}
catch(Exception ex)
{
string str=ex.Message
return path
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)