在线压缩

前几天接到一个项目,里面让导出数据到word文档,因为是调查问卷,所以每个人的问卷导出为一份文档。

好几千人的问卷调查怎么可能一个人一份的导出,思索良久,有了一条思路。

1.先建好一个问卷调查模板;

2.从数据库里读出来后替换模板里的答案;

3.将替换好的导出到一个文件夹里;

4.在线压缩文件;

5.提供压缩文件下载,删除文件夹;

======================这是思路,窃喜==============================

模板呢是根据自己需求建立的,这里就不在赘述

下面是使用模板替换并保持到指定路径:

View Code
 1  string path = dirPath + "\\";
 2             Encoding code = Encoding.GetEncoding("gb2312");
 3             //   读取模板文件  
 4             string temp = HttpContext.Current.Server.MapPath("MoBan1.htm");
 5             StreamReader sr = null;
 6             StreamWriter sw = null;
 7             string str = "";
 8             try
 9             {
10                 sr = new StreamReader(temp, code);
11                 str = sr.ReadToEnd();   //   读取文件  
12             }
13             catch (Exception exp)
14             {
15                 HttpContext.Current.Response.Write(exp.Message);
16                 HttpContext.Current.Response.End();
17                 sr.Close();
18             }
19             Thread.Sleep(10);
20             string htmlfilename = "";
21 
22             htmlfilename = dt.Rows[i]["stuname"].ToString().Trim() + ".doc";
23 
24 
25             //   替换内容  
26             //   这时,模板文件已经读入到名称为str的变量中了  
27             str = str.Replace("[xin]", dt.Rows[i]["stuname"].ToString());//姓名
28             str = str.Replace("[sex]", dt.Rows[i]["sex"].ToString());//性别
29             str = str.Replace("[zhu]", dt.Rows[i]["zhuanye"].ToString());//作者
30             str = str.Replace("[xu]", dt.Rows[i]["xueli"].ToString());//信息来源
31             str = str.Replace("[dia]", dt.Rows[i]["dianhua"].ToString());//时间
32             str = str.Replace("[em]", dt.Rows[i]["email"].ToString());//类别
33             str = str.Replace("[shi]", dt.Rows[i]["shixunxiangmu"].ToString());//地址
34             str = str.Replace("[jia]", dt.Rows[i]["jiaoshi"].ToString());
35             str = str.Replace("[riqi]", dt.Rows[i]["riqi"].ToString());
36             str = str.Replace("[daan1]",dt.Rows[i]["daan"].ToString());
37                       
38             //   写文件  
39             try
40             {
41                 sw = new StreamWriter(path + htmlfilename, false, code);
42                 sw.Write(str);
43                 sw.Flush();
44             }
45             catch (Exception ex)
46             {
47                 HttpContext.Current.Response.Write(ex.Message);
48                 HttpContext.Current.Response.End();
49             }
50             finally
51             {
52                 sw.Close();
53             }
54 
55 
56         }

然后就是在线压缩了:

View Code
 1 public bool ZipFileMain(string zippath, string zipfilename, string fileFilter)
 2     {
 3         try
 4         {
 5             Crc32 crc = new Crc32();
 6             ZipOutputStream s = new ZipOutputStream(File.Create(zipfilename));
 7 
 8             s.SetLevel(6); // 0 - store only to 9 - means best compression
 9 
10             DirectoryInfo di = new DirectoryInfo(zippath);
11 
12             FileInfo[] a = di.GetFiles(fileFilter);
13 
14             cutStr = zippath.Trim();
15             //压缩这个目录下的所有文件
16             writeStream(ref s, a, crc);
17             //压缩这个目录下子目录及其文件
18             direct(di, ref s, crc);
19 
20             s.Finish();
21             s.Close();
22         }
23         catch
24         {
25             return false;
26         }
27         return true;
28     }

写到这里基本工作都完成了,在遍历循环文件夹删除文件即可:

View Code
 1  public static void DeleteFile(string dirRoot)
 2     {
 3         try
 4         {
 5             string[] rootDirs = Directory.GetDirectories(dirRoot); //当前目录的子目录:
 6             string[] rootFiles = Directory.GetFiles(dirRoot);        //当前目录下的文件:
 7 
 8             foreach (string s2 in rootFiles)
 9             {
10                 File.Delete(s2);                      //删除文件                    
11             }
12             foreach (string s1 in rootDirs)
13             {
14                 DeleteFile(s1);
15             }
16         }
17         catch (Exception ex)
18         {
19             Console.WriteLine(ex.Message.ToString());
20         }
21     }

好了,大功告成!

原文地址:https://www.cnblogs.com/ypyhy/p/2881609.html