ASP.NET 文件压缩解压类(C#)

来源:脚本之家  责任编辑:小易  

protected void Page_Load(object sender, EventArgs e){ string pageName = Path.GetFileNameWithoutExtension(Page.AppRelativeVirtualPath); }

本文实例讲述了asp.net C#实现解压缩文件的方法,需要引用一个ICSharpCode.SharpZipLib.dll,供大家参考,具体如下:

这个按说是OOP的基础知识 using System namespaces Test { public class Test { public void TestFunction() { Console.WriteLine("Test类的函数"); } } } 主程序最开始 using Test; …… …… public void Main(string[] args) { Test te=new Test(

文件路径是不是有中文啊?zh-tw 这是繁体的! asp.net2.0以后,我们有了很多种文件下载的选择。 public partial class FileDownLoad : System.Web.UI.Page { //提供下载的文件,不编码的话文件名会乱码 private string fileName = HttpContext.C

using System; using System.Collections.Generic; using System.Linq; using System.Text; using ICSharpCode.SharpZipLib.Zip; using System.IO; using ICSharpCode.SharpZipLib.Checksums; using System.Web; namespace Mvc51Hiring.Common.Tool { /// <summary> <br> /// 作者:来自网格<br> /// 修改人:sunkaixaun /// 压缩和解压文件 /// </summary> public class ZipClass { /// <summary> /// 所有文件缓存 /// </summary> List<string> files = new List<string>(); /// <summary> /// 所有空目录缓存 /// </summary> List<string> paths = new List<string>(); /// <summary> /// 压缩单个文件根据文件地址 /// </summary> /// <param name="fileToZip">要压缩的文件</param> /// <param name="zipedFile">压缩后的文件全名</param> /// <param name="compressionLevel">压缩程度,范围0-9,数值越大,压缩程序越高</param> /// <param name="blockSize">分块大小</param> public void ZipFile(string fileToZip, string zipedFile, int compressionLevel, int blockSize) { if (!System.IO.File.Exists(fileToZip))//如果文件没有找到,则报错 { throw new FileNotFoundException("The specified file " + fileToZip + " could not be found. Zipping aborderd"); } FileStream streamToZip = new FileStream(fileToZip, FileMode.Open, FileAccess.Read); FileStream zipFile = File.Create(zipedFile); ZipOutputStream zipStream = new ZipOutputStream(zipFile); ZipEntry zipEntry = new ZipEntry(fileToZip); zipStream.PutNextEntry(zipEntry); zipStream.SetLevel(compressionLevel); byte[] buffer = new byte[blockSize]; int size = streamToZip.Read(buffer, 0, buffer.Length); zipStream.Write(buffer, 0, size); try { while (size < streamToZip.Length) { int sizeRead = streamToZip.Read(buffer, 0, buffer.Length); zipStream.Write(buffer, 0, sizeRead); size += sizeRead; } } catch (Exception ex) { GC.Collect(); throw ex; } zipStream.Finish(); zipStream.Close(); streamToZip.Close(); GC.Collect(); } /// <summary> /// 压缩目录(包括子目录及所有文件) /// </summary> /// <param name="rootPath">要压缩的根目录</param> /// <param name="destinationPath">保存路径</param> /// <param name="compressLevel">压缩程度,范围0-9,数值越大,压缩程序越高</param> public void ZipFileFromDirectory(string rootPath, string destinationPath, int compressLevel) { GetAllDirectories(rootPath); /* while (rootPath.LastIndexOf("\\") + 1 == rootPath.Length)//检查路径是否以"\"结尾 { rootPath = rootPath.Substring(0, rootPath.Length - 1);//如果是则去掉末尾的"\" } */ //string rootMark = rootPath.Substring(0, rootPath.LastIndexOf("\\") + 1);//得到当前路径的位置,以备压缩时将所压缩内容转变成相对路径。 string rootMark = rootPath + "\\";//得到当前路径的位置,以备压缩时将所压缩内容转变成相对路径。 Crc32 crc = new Crc32(); ZipOutputStream outPutStream = new ZipOutputStream(File.Create(destinationPath)); outPutStream.SetLevel(compressLevel); // 0 - store only to 9 - means best compression foreach (string file in files) { FileStream fileStream = File.OpenRead(file);//打开压缩文件 byte[] buffer = new byte[fileStream.Length]; fileStream.Read(buffer, 0, buffer.Length); ZipEntry entry = new ZipEntry(file.Replace(rootMark, string.Empty)); entry.DateTime = DateTime.Now; // set Size and the crc, because the information // about the size and crc should be stored in the header // if it is not set it is automatically written in the footer. // (in this case size == crc == -1 in the header) // Some ZIP programs have problems with zip files that don't store // the size and crc in the header. entry.Size = fileStream.Length; fileStream.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; outPutStream.PutNextEntry(entry); outPutStream.Write(buffer, 0, buffer.Length); } this.files.Clear(); foreach (string emptyPath in paths) { ZipEntry entry = new ZipEntry(emptyPath.Replace(rootMark, string.Empty) + "/"); outPutStream.PutNextEntry(entry); } this.paths.Clear(); outPutStream.Finish(); outPutStream.Close(); GC.Collect(); } /// <summary> /// 多文件打包下载 /// </summary> public void DwonloadZip(string[] filePathList, string zipName) { MemoryStream ms = new MemoryStream(); byte[] buffer = null; var context = HttpContext.Current; using (ICSharpCode.SharpZipLib.Zip.ZipFile file = ICSharpCode.SharpZipLib.Zip.ZipFile.Create(ms)) { file.BeginUpdate(); file.NameTransform = new MyNameTransfom();//通过这个名称格式化器,可以将里面的文件名进行一些处理。默认情况下,会自动根据文件的路径在zip中创建有关的文件夹。 foreach (var it in filePathList) { file.Add(context.Server.MapPath(it)); } file.CommitUpdate(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); } context.Response.AddHeader("content-disposition", "attachment;filename=" + zipName); context.Response.BinaryWrite(buffer); context.Response.Flush(); context.Response.End(); } /// <summary> /// 取得目录下所有文件及文件夹,分别存入files及paths /// </summary> /// <param name="rootPath">根目录</param> private void GetAllDirectories(string rootPath) { string[] subPaths = Directory.GetDirectories(rootPath);//得到所有子目录 foreach (string path in subPaths) { GetAllDirectories(path);//对每一个字目录做与根目录相同的操作:即找到子目录并将当前目录的文件名存入List } string[] files = Directory.GetFiles(rootPath); foreach (string file in files) { this.files.Add(file);//将当前目录中的所有文件全名存入文件List } if (subPaths.Length == files.Length && files.Length == 0)//如果是空目录 { this.paths.Add(rootPath);//记录空目录 } } /// <summary> /// 解压缩文件(压缩文件中含有子目录) /// </summary> /// <param name="zipfilepath">待解压缩的文件路径</param> /// <param name="unzippath">解压缩到指定目录</param> /// <returns>解压后的文件列表</returns> public List<string> UnZip(string zipfilepath, string unzippath) { //解压出来的文件列表 List<string> unzipFiles = new List<string>(); //检查输出目录是否以“\\”结尾 if (unzippath.EndsWith("\\") == false || unzippath.EndsWith(":\\") == false) { unzippath += "\\"; } ZipInputStream s = new ZipInputStream(File.OpenRead(zipfilepath)); ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { string directoryName = Path.GetDirectoryName(unzippath); string fileName = Path.GetFileName(theEntry.Name); //生成解压目录【用户解压到硬盘根目录时,不需要创建】 if (!string.IsNullOrEmpty(directoryName)) { Directory.CreateDirectory(directoryName); } if (fileName != String.Empty) { //如果文件的压缩后大小为0那么说明这个文件是空的,因此不需要进行读出写入 if (theEntry.CompressedSize == 0) break; //解压文件到指定的目录 directoryName = Path.GetDirectoryName(unzippath + theEntry.Name); //建立下面的目录和子目录 Directory.CreateDirectory(directoryName); //记录导出的文件 unzipFiles.Add(unzippath + theEntry.Name); FileStream streamWriter = File.Create(unzippath + theEntry.Name); int size = 2048; byte[] data = new byte[2048]; while (true) { size = s.Read(data, 0, data.Length); if (size > 0) { streamWriter.Write(data, 0, size); } else { break; } } streamWriter.Close(); } } s.Close(); GC.Collect(); return unzipFiles; } } public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform { #region INameTransform 成员 public string TransformDirectory(string name) { return null; } public string TransformFile(string name) { return Path.GetFileName(name); } #endregion } }

路径的那个比较容易,写个循环把文件的路径列举出来保存到list或者数组中就好了 显示文件内容,需要做的工作就多了一点,首先根据选择的完整路径定位到文件,然后读取文件的全部内容,然后将内容赋值给在线编辑器,让编辑器显示出来。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

ASP.NET(C#)自动解压并判断解压出来的文件格式问题

首先咱滤清一下你的整个逻辑思路:1. 没压缩前首先遍历文件夹,查找swf文件。2. Copy 这个swf文件到一个临时文件夹。3. 把这个临时文件夹打包压缩。4. 上传(用 Fileupload控件) 按照这个逻辑你应该清楚怎么写代码了吧,难点应该是压缩。下面是示例代码: using System;

using System.IO;

using System.IO.Compression;public class GZipTest

{

public static bool CompareData(byte[] buf1, int len1, byte[] buf2, int len2)

{

// Use this method to compare data from two different buffers.

if (len1 != len2)

{

Console.WriteLine("Number of bytes in two buffer are different {0}:{1}", len1, len2);

return false;

} for ( int i= 0; i< len1; i++)

{

if ( buf1[i] != buf2[i])

{

Console.WriteLine("byte {0} is different {1}|{2}", i, buf1[i], buf2[i]);

return false;

}

}

Console.WriteLine("All bytes compare.");

return true;

} }

详细信息参考MSDN:http://msdn.microsoft.com/zh-cn/library/system.io.compression.gzipstream(VS.80).aspx

asp.net(C#)*FileUpload查看的文件类型

protected void Button1_Click(object sender, EventArgs e)

{

string stmp = "";

if (FileUpload1.HasFile)

{

try

{

string sfilename = FileUpload1.FileName;//取得文件名

string path = Request.PhysicalApplicationPath + "uploadfile\\" ;//取得网站物理路径

//给文件重新命名,防止名称重复

Random rd = new Random();

string sExtension = Path.GetExtension(sfilename);

//得到包含路径的文件名

if (!sExtension.Equals(".jpg"))

{

Response.Write("只让上传jpg文件");

Response.End();

return;

}

sfilename = DateTime.Now.ToString("yyyyMMddhhmmss") + rd.Next(100,999).ToString() + sExtension;

//在同一时间上传名字一样的概率就小了 //得到包含路径的文件名

sfilename = path + sfilename;

//上传

FileUpload1.SaveAs(sfilename);

stmp += "Save As:"+ FileUpload1.PostedFile.FileName;

stmp += "File Type:" + FileUpload1.PostedFile.ContentType;

stmp += "File Length:" + FileUpload1.PostedFile.ContentLength.ToString();

Response.Write(stmp); }

catch (Exception ef)

{

Response.Write(ef.Message);

}

}

}这里我举了个只能上传.jpg格式的文件,而且避免了上传同名的文件的尴尬,即使同名了也没关系,还有就是你的根目录下必须有uploadfile这个文件夹,所有上传过的图片都是在这里存在的如果感觉不错的话顶一下哦

asp.net(c#)如何上传大文件?

想要想上传大文件,必须在web.config文件中进行配置。

在<system.web>节点中添加如下代码即可:

<httpRuntime maxRequestLength="2097151"/>

这个代码就是表示设置最大请求值,上传文件也就相当于请求。maxRequestLength单位为KB,最大值为:2097151.如果不设置,默认为4096 KB (4 MB)。

也就是说上传的文件最大可以上传2G以内的文件。

一般没有配置的话,默认只能上传4M以内的文件。配置了的话就可以上传更大的文件。

ASP.NET 如何后台做到将上传的自动文件解压,并获取压缩包的字段。

这类也不难。

江湖救急~~~~~~~~~~~在线等~~~~~~关于用ASP.NET(C#)上传下载文件问题

你可以利用大文件上传控件的!先前有试过一个的是可以的

  • 本文相关:
  • c#使用gzipstream解压缩数据文件的方法
  • c# 文件压缩zip或将zip文件解压的方法
  • c#实现文件压缩与解压的方法示例【zip格式】
  • c#实现的文件压缩和解压缩类
  • c#使用icsharpcode进行文件压缩实现方法
  • c#实现metro文件压缩解压示例
  • c#文件流进行压缩和解压缩的方法
  • c#实现rar压缩与解压缩文件的方法
  • c#解压文件的实例方法
  • c#使用gzipstream实现文件的压缩与解压
  • asp.net(c#)跨域及跨域写cookie问题
  • asp.net mvc5+ef6+easyui 后台管理系统(81)-数据筛选(万能查询
  • visual studio 2017安装使用教程
  • asp.net ref和out关键字区别分析
  • asp.net中上传并读取excel文件数据示例
  • 浅析常用分词算法的比较与设想
  • asp.net中倒计时自动跳转页面的实现方法(使用javascript)
  • 微信公众平台开发之自定义菜单.net代码解析
  • asp.net图片上传生成缩略图的注意事项
  • wpf图形解锁控件screenunlock使用详解
  • ASP.NET(C#)自动解压并判断解压出来的文件格式问题
  • asp.net(C#)限制FileUpload查看的文件类型
  • asp.net(c#)如何上传大文件?
  • ASP.NET 如何后台做到将上传的自动文件解压,并获...
  • 江湖救急~~~~~~~~~~~在线等~~~~~~关于用ASP.NET(C#...
  • ASP.NET(C#)怎样取得当前页面的文件名
  • 在ASP.NET(C#)怎样定义类和引用类?
  • 一个关于asp.net(c#)下载文件的问题
  • asp.net(C#) 怎么插入html文件
  • Asp.net(c#)文件上传于下载
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved