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", 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页