分享

.net利用io流实现动态网站静态化

 wangn 2010-09-16

在这里,我将一些新闻从数据库读取后,以静态化形式显示出来。

先找一个静态页面模板,如下:

注意页面中的NewsTitle和NewsContent标签

下面我们在一个按钮的事件方法中写生成代码:

string aid = this.GridView1.DataKeys[e.RowIndex]["ArticleID"].ToString();
            SqlConnection conn = new SqlConnection("server=.;database=tb_News;uid=sa;pwd=");
            SqlCommand cmd = new SqlCommand("select * from tb_Ariticle where ArticleID=" + aid, conn);
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();

            //获取新闻发布的时间
            string date = "";

            if (dr.Read())
            {
                date = Convert.ToDateTime(dr["RelaseDate"]).ToString("yyyyMMddHHmmss_");//获取时间是为了生成的时候构造文件民名
                //调用静态生成方法
                TransferStatic(dr["Title"].ToString(), dr["Content"].ToString(), date, aid);
            }

/// <summary>
        /// 转换方法
        /// </summary>
        /// <param name="title"></param>
        /// <param name="content"></param>
        /// <param name="date"></param>
        /// <param name="aid"></param>
        /// <returns></returns>
        private bool TransferStatic(string title,string content,string date,string aid)
        {
            //输出路径
            string outPath = Server.MapPath("~/News\\");
            Encoding encoding = Encoding.GetEncoding("gb2312"); //定义转换的编码格式


            //读取模板文件:这个是为了下面利用模板

            string htmlModel = Server.MapPath("~/mode/ContentModel.html");
           
           //利用流的方法
            StreamWriter sw = null;
            StreamReader sr = null;

            string str = ""; //保存从模板文件中读取的内容以及后面替换的内容

            //读文件
            try
            {
                sr = new StreamReader(htmlModel, encoding);
                str = sr.ReadToEnd(); //将模板文件读取到字符串str中
            }

            catch(Exception e)
            {
                Response.Write(e.Message);
                Response.End();
                sr.Close();
            }

            //构造要生成的静态页面的名字
            string pageName = date + aid + ".html";

            //开始替换内容
            str = str.Replace("NewsTitle",title);//第一个参数是要替换的内容部分
            str = str.Replace("NewsContent", content);

            //写文件
            try
            {
                sw = new StreamWriter(outPath + pageName, true, encoding);

                sw.Write(str);//将字符串str写入到文件

                sw.Flush(); //这个最好不好忘记
            }
            catch (Exception e)
            {
                Response.Write(e.Message);
                Response.End();
            }
            finally
            {
                sw.Close();
            }
            return true;
           
        }

我们打开News目录,就会发现我们刚才生成的页面。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约