复制
保存
// ******************************************************** // 网页计数器控件 // Designed by Faib Studio. // Copyright 2007 // Email faib920@126.com 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 } }