一個簡單的網頁計數器

今天寫了一個最簡單的計數器,實現的功能很簡單,可以記錄總訪問數及今日訪問數。代碼如下:
複製  保存
// ********************************************************
// 網頁計數器控件
// Designed by Faib Studio.
// Copyright 2007
// Email [email protected] or QQ 55570729
// ********************************************************

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.IO;
using System.Text;

namespace FaibClass.WebControls
{
    [ToolboxData("<{0}:Counter runat=server></{0}:Counter>")]
    public class Counter : Label
    {
        #region 私有變量
        private string m_FileName = "";
        private string m_ImageUrl = "";
        private int m_Length = 5;
        private int m_TotalCount, m_TodayCount;
        private bool m_OnlyIcon = false;
        #endregion

        public Counter()
        {
        }
        #region 屬性
        [Browsable(false)]
        public override string Text
        {
            get { return base.Text; }
            set { base.Text = value; }
        }

        [Category("Appearance"),
        Description("保存計數的文本文件路徑。"),
        Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string FileName
        {
            get { return m_FileName; }
            set { m_FileName = value; }
        }

        [Category("Appearance"),
        Description("使用圖象來顯示計數,數字使用通配符?代替。"),
        Editor(typeof(ImageUrlEditor), typeof(UITypeEditor))]
        public string ImageUrl
        {
            get { return m_ImageUrl; }
            set { m_ImageUrl = value; }
        }

        [Category("Appearance"),
        Description("顯示計數的默認長度。"),
        DefaultValue(5)]
        public int Length
        {
            get { return m_Length; }
            set { m_Length = value; }
        }

        [Category("Appearance"),
        Description("是否只在界面上顯示一個圖標。"),
        DefaultValue(false)]
        public bool OnlyIcon
        {
            get { return m_OnlyIcon; }
            set { m_OnlyIcon = value; }
        }

        //總訪問量
        [Browsable(false)]
        public int TotalCount
        {
            get { return m_TotalCount; }
            set { m_TotalCount = value; }
        }

        //今日訪問量
        [Browsable(false)]
        public int TodayCount
        {
            get { return m_TodayCount; }
            set { m_TodayCount = value; }
        }

        #endregion
        #region 公共方法
        protected override void OnLoad(EventArgs e)
        {
            int counter = 0, todaycounter = 0;
            DateTime today = DateTime.MinValue;
            StringBuilder builder = new StringBuilder();
            if (Util.IsDesignMode(Page))//是否設計模式
            {
                Random rad = new Random();
                if (m_ImageUrl.Length == 0)
                {
                    if (m_OnlyIcon)
                    {
                        builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
                    }
                    else
                    {
                        for (int i = 0; i < m_Length; i++)
                        {
                            builder.Append(rad.Next(9).ToString());
                        }
                    }
                }
                else
                {
                    if (m_OnlyIcon)
                    {
                        builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
                    }
                    else
                    {
                        for (int i = 0; i < m_Length; i++)
                        {
                            builder.Append("<img src=/"" + m_ImageUrl.Replace("?", rad.Next(9).ToString()) + "/" align=absmiddle>");
                        }
                    }
                }
            }
            else
            {
                bool blnExists = File.Exists(Page.Server.MapPath(m_FileName));
                if (blnExists)//讀出訪問量
                {
                    StreamReader str = File.OpenText(Page.Server.MapPath(m_FileName));
                    try
                    {
                        counter = int.Parse(str.ReadLine());
                        todaycounter = int.Parse(str.ReadLine());
                        today = DateTime.Parse(str.ReadLine());
                    }
                    catch
                    {
                        throw new Exception("文件內容爲空,請將文件刪除");
                    }
                    finally
                    {
                        str.Close();
                    }
                }

                if (Page.Session["__Counter"] == null)
                {
                    counter++;
                    todaycounter++;
                    if (today != DateTime.Today)
                    {
                        today = DateTime.Today;
                    }
                }
                string s = counter.ToString();
                Attributes.Add("title", "總計: " + s + ", 今日: " + todaycounter.ToString());
                if (m_OnlyIcon)
                {
                    builder.Append("<img src=/"" + m_ImageUrl + "/" align=absmiddle>");
                }
                else
                {
                    if (s.Length < m_Length)
                    {
                        if (m_ImageUrl.Length == 0)
                        {
                            for (int i = 0; i < m_Length - s.Length; i++)
                            {
                                builder.Append("0");
                            }
                        }
                        else
                        {
                            for (int i = 0; i < m_Length - s.Length; i++)
                            {
                                builder.Append("<img src=/"" + m_ImageUrl.Replace("?", "0") + "/" align=absmiddle>");
                            }
                        }
                    }
                    if (m_ImageUrl.Length == 0)
                    {
                        builder.Append(s);
                    }
                    else
                    {
                        for (int i = 0; i < s.Length; i++)
                        {
                            builder.Append("<img src=/"" + m_ImageUrl.Replace("?", s.Substring(i, 1)) + "/" align=absmiddle>");
                        }
                    }
                }

                //將新的訪問量寫入文件
                if (Page.Session["__Counter"] == null)
                {
                    StreamWriter stw = new StreamWriter(Page.Server.MapPath(m_FileName));
                    stw.WriteLine(counter.ToString());//寫入總計
                    stw.WriteLine(todaycounter.ToString());//寫入日期
                    stw.WriteLine(today.ToShortDateString());//寫入今日訪問量
                    stw.Close();

                    Page.Session["__Counter"] = 1;//標識
                }
            }
            Text = builder.ToString();
            m_TotalCount = counter;
            m_TodayCount = todaycounter;
            base.OnLoad(e);
        }
        #endregion
    }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章