asp.net实现文件夹及文件压缩,并实现下载

asp.net实现文件夹及文件压缩,并实现下载,第1张

步骤

)先引用 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

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12100968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存