// 生成100个测试txt文件 protected void Page_Load(object sender, EventArgs e) { for (var i = 1; i <= 100; i++) { using (StreamWriter writer = new StreamWriter(Server.MapPath("/Content/Txt/" + i.ToString().PadLeft(3, '0') + ".txt"), false)) { writer.WriteLine(i.ToString().PadLeft(3,'0') + " - 这是测试的数据!"); } } Response.Write("Create txt done"); }
// 测试全并并下载 protected void Page_Load(object sender, EventArgs e) { var dirInfos = Directory.GetFiles(Server.MapPath("/Content/Txt")); Response.ContentType = "application/octet-stream"; Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("all.txt", Encoding.UTF8)); foreach (var str in dirInfos) { using (FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read)) { Byte[] bs = new Byte[fs.Length]; fs.Read(bs, 0, (int)fs.Length); Response.BinaryWrite(bs); } } Response.End(); }
不错,不过不能一边合并一边下载, 这个合并完浏览器才弹已下载完文件,文件多时合并的比较慢时,浏览器一直加载中,这样很容易被人误无法下载的.
如何像这种
http://www.qingdi.com/modules/article/txtarticle.php?id=922&%20lm=http://www.qingdi.com/book/922.html
在后台读取txt文件,拼接成一个,写入流中
第一点,你合并成一个后还要不要能分开.
第二点,一边下载一边合并不现实.
读取txt 然后将内容追加的方式写入一个txt 一边下载一边合并 是否会有丢字节的情况?
将读取到得100个txt文档的流合并成一个,然后保存成一个txt文档,让用户下载这个东西就好了,其他的文档不要动。
怎么合并的时候下载?
下载好一个后再拼接到上一个就可以了
可以换个思路考虑,为什么不在服务器放个整体呢,显示的时候按章节分割显示;
读出来 StreamReader 读完就是String 然后拼在一起但这样 很耗内存自己 分段读取吧