using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO;
namespace testDataSet { public partial class ToHtml : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //可以根据id生成静态页面 //int id; // try // { // id = int.Parse (Request.QueryString["id"]); // } // catch // { // throw (new Exception ("页面没有指定id")); // } // string filename=Server.MapPath("StaticHtml_"+id+".html"); string filename=Server.MapPath("StaticHtml.html"); Stream s = GetFileStream (filename);//尝试读取已有文件 if (s != null)//如果文件存在并且读取成功 { using (s) { Stream2Stream (s, Response.OutputStream);///从文件到本页面 Response.End (); } } //调用Main_Execute,并且获取其输出 StringWriter sw = new StringWriter (); // Server.Execute("SQLtoXML.aspx?id="+id, sw);//执行 SQLtoXML.aspx 页面,并将内容存入 sw 中
Server.Execute("SQLtoXML.aspx", sw);//执行 SQLtoXML.aspx 页面,并将内容存入 sw 中 string content = sw.ToString (); Response.Write(content);//输出到客户端 Response.Flush(); //写进文件 try { using (FileStream fs = new FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.Write)) { using (StreamWriter streamwriter = new StreamWriter (fs, Response.ContentEncoding)) { streamwriter.Write (content); } } } finally { //Response.End (); } }
/// <summary> /// 输出文件内容 /// </summary> /// <param name="src">文件源</param> /// <param name="dst">输出目的地</param> static public void Stream2Stream (Stream src, Stream dst) { byte[] buf = new byte[4096]; while (true) { int c = src.Read (buf, 0, buf.Length); if(c==0) return; dst.Write (buf, 0, c); } }
/// <summary> /// 得到5分钟之内的内容 ,超过5分钟返回null /// </summary> /// <param name="filename">要生成的目标文件</param> /// <returns>返回文件内容 或 null</returns> public Stream GetFileStream(string filename) { try { DateTime dt = File.GetLastWriteTime (filename);//得到文件的最后写入时间 TimeSpan ts= DateTime.Now - dt; if(ts.TotalMinutes>5) return null; //5分钟后过期 return new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.Read); } catch { return null; } } } }
效果:运行后生成的html页