• 在线压缩


    前几天接到一个项目,里面让导出数据到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     }

    好了,大功告成!

  • 相关阅读:
    UVA 110 Meta-Loopless Sorts(输出挺麻烦的。。。)
    使用bash判断PATH中是否存在某个路径
    Palindrome(poj3974)(manacher算法)
    Highcharts简介
    android 4.3源码编译
    Unsupervised Feature Learning and Deep Learning(UFLDL) Exercise 总结
    借助Ant工具,实现快速开发
    关于tableView的简单实例
    Matlab单元(Cell)数据的应用
    spring 资源加载使用说明
  • 原文地址:https://www.cnblogs.com/ypyhy/p/2881609.html
Copyright © 2020-2023  润新知