ICSharpCode.SharpZipLib.dll类库资源下载地址
需要下载ICSharpCode.SharpZipLib.dll,并添加到项目引用。
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="sourceFilePath">文件路径</param>
/// <param name="destinationZipFilePath">压缩后的地址</param>
public void DownLoad(string fileName)
{
if (fileName.Length > 0)
{
string sourceFilePath = System.AppDomain.CurrentDomain.BaseDirectory + @"File\";
string destinationZipFilePath = sourceFilePath + DateTime.Now.ToString("yyyyMMddHHmmss") + "附件.zip";
//生成压缩文件夹
ZipOutputStream zipStream = new ZipOutputStream(System.IO.File.Create(destinationZipFilePath));
zipStream.SetLevel(6); // 压缩级别 0-9
//创建压缩文件
CreateZipFiles(fileName, sourceFilePath, zipStream);
zipStream.Finish();
zipStream.Close();
//文件路径截取压缩文件名
string FileName = Path.GetFileName(destinationZipFilePath);
Console.WriteLine(FileName);
//实例化保存控件
SaveFileDialog saveFileDialog = new SaveFileDialog();
//下载窗体标题
saveFileDialog.Title = "下载文件";
//设置文件类型
saveFileDialog.Filter = "所有文件(*.*)|*.*";
//设置默认文件名
saveFileDialog.FileName = FileName;
//调用窗口返回值
DialogResult dialogResult = saveFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK)
{
System.Net.WebClient client = new System.Net.WebClient();
//一个真正存放数据的地址,一般我们将连接存在数据库中,数据存放在数据服务器上
byte[] data = client.DownloadData(destinationZipFilePath);
FileStream fs = new FileStream(saveFileDialog.FileName, FileMode.Create);
fs.Write(data, 0, data.Length);
fs.Close();
}
}
else
{
}
}
/// <summary>
/// 递归压缩文件
/// </summary>
/// <param name="fileName">待压缩的文件名</param>
/// <param name="sourceFilePath">待压缩的文件或文件夹路径</param>
/// <param name="zipStream">打包结果的zip文件路径(类似 D:\WorkSpace\a.zip),全路径包括文件名和.zip扩展名</param>
private static void CreateZipFiles(string fileName, string sourceFilePath, ZipOutputStream zipStream)
{
//声明一个 Crs32 类型的对象 crc ,并将之实例化。
Crc32 crc = new Crc32();
//按;切割文件名存储到数组
string[] _fileName = fileName.Split(new char[] { ';' });
foreach (string file in _fileName)
{
//创建文件路径的对象
string filePath = sourceFilePath + file;
FileStream fileStream = System.IO.File.OpenRead(filePath);
//定义一个字节数组,相当于缓存
byte[] buffer = new byte[fileStream.Length];
fileStream.Read(buffer, 0, buffer.Length);
//string tempFile = file.Substring((a.LastIndexOf("\\"))+1);
//实例化文件名比如“1.txt”
ZipEntry entry = new ZipEntry(file);
entry.DateTime = DateTime.Now;
entry.Size = fileStream.Length;
fileStream.Close();
crc.Reset();
crc.Update(buffer);
entry.Crc = crc.Value;
zipStream.PutNextEntry(entry);
zipStream.Write(buffer, 0, buffer.Length);
}
}
这段代码展示了如何使用ICSharpCode.SharpZipLib库来压缩文件并提供下载。首先,创建ZipOutputStream以设定压缩级别,然后通过递归压缩文件到指定的zip文件。接着,使用SaveFileDialog让用户选择保存位置,最后通过WebClient下载压缩文件到选定的位置。

1644

被折叠的 条评论
为什么被折叠?



