使用者透過網路要如何取得存放在IIS上某個資料夾中的資料呢?
資料很多時,是否應該要一起下載下來而不是一次一個?
一個資料夾要怎麼下載下來呢?
壓縮檔案便是一個解
靜態的Folder如何壓縮成一個zip檔案
我是參考此篇的做法(在此紀錄方法)
- 引入ICSharpCode.SharpZipLib ,可以從nuget下載安裝、或者透過網址下載安裝
https://www.dllme.com/getfile.php?file=11336&id=c8164876b6f66616d68387443621510c - 引入參考後
using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Checksums;
撰寫程式(這邊的程式碼我直接引用了參考1的網址,唯獨 //打开压缩文件using (FileStream fs = File.OpenRead(file))
這邊因為File的windows form的方法所以將此改寫 using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)){} - 只要根據他的param去填寫即可
//test string DirectoryToZip = "C:/Users/Emily/source/repos/JeanServiceWeb/JeanServiceWeb/Files/1459_test@gmail_com"; string ZipedPath = "C:/Users/Emily/source/repos/JeanServiceWeb/JeanServiceWeb/Files"; //產生壓縮檔 ZipDirectory(DirectoryToZip, ZipedPath); /// <summary> /// ZIP:压缩文件夹 /// add yuangang by 2016-06-13 /// </summary> /// <param name="DirectoryToZip">需要压缩的文件夹(绝对路径)</param> /// <param name="ZipedPath">压缩后的文件路径(绝对路径)</param> /// <param name="ZipedFileName">压缩后的文件名称(文件名,默认 同源文件夹同名)</param> /// <param name="IsEncrypt">是否加密(默认 加密)</param> public void ZipDirectory(string DirectoryToZip, string ZipedPath, string ZipedFileName = "", bool IsEncrypt = false) { //如果目录不存在,则报错 if (!System.IO.Directory.Exists(DirectoryToZip)) { throw new System.IO.FileNotFoundException("指定的目录: " + DirectoryToZip + " 不存在!"); } //文件名称(默认同源文件名称相同) string ZipFileName = string.IsNullOrEmpty(ZipedFileName) ? ZipedPath + "\\" + new DirectoryInfo(DirectoryToZip).Name + ".zip" : ZipedPath + "\\" + ZipedFileName + ".zip"; using (System.IO.FileStream ZipFile = System.IO.File.Create(ZipFileName)) { using (ZipOutputStream s = new ZipOutputStream(ZipFile)) { if (IsEncrypt) { //压缩文件加密 s.Password = "123"; } ZipSetp(DirectoryToZip, s, ""); } } } /// <summary> /// 递归遍历目录 /// add yuangang by 2016-06-13 /// </summary> private static void ZipSetp(string strDirectory, ZipOutputStream s, string parentPath) { if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar) { strDirectory += Path.DirectorySeparatorChar; } Crc32 crc = new Crc32(); string[] filenames = Directory.GetFileSystemEntries(strDirectory); foreach (string file in filenames)// 遍历所有的文件和目录 { if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件 { string pPath = parentPath; pPath += file.Substring(file.LastIndexOf("\\") + 1); pPath += "\\"; ZipSetp(file, s, pPath); } else // 否则直接压缩文件 { //打开压缩文件 //using (FileStream fs = File.OpenRead(file)) using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string fileName = parentPath + file.Substring(file.LastIndexOf("\\") + 1); ZipEntry entry = new ZipEntry(fileName); entry.DateTime = DateTime.Now; entry.Size = fs.Length; fs.Close(); crc.Reset(); crc.Update(buffer); entry.Crc = crc.Value; s.PutNextEntry(entry); s.Write(buffer, 0, buffer.Length); } } } }
產生壓縮檔後希望可以將原先的檔案夾刪除
string ZipedPath = "C:/Users/Emily/source/repos/JeanServiceWeb/JeanServiceWeb/Files";
//刪除原資料夾
System.IO.Directory.Delete(DirectoryToZip, true);