0

我的计数器保存在文本文件中。我的问题是计数器在我不知情的情况下从零重新启动。我暂时只经历过一次。但我想知道为什么代码会重新启动计数器。这是代码:

public class HitCounterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);

        string lastCount = "";
        try
        {
            StreamReader SR = File.OpenText(HttpContext.Current.Server.MapPath("~/Helpers/HitCounter.txt"));
            string getCount = null;
            while ((getCount = SR.ReadLine()) != null)
            {
                lastCount = lastCount + getCount;
            }
            SR.Close();
            long newCount = Convert.ToInt64(lastCount);
            newCount++;
            TextWriter TxtWtr = new StreamWriter(HttpContext.Current.Server.MapPath("~/Helpers/HitCounter.txt"));
            TxtWtr.WriteLine(Convert.ToString(newCount));
            TxtWtr.Close();
            SR = File.OpenText(HttpContext.Current.Server.MapPath("~/Helpers/HitCounter.txt"));
            getCount = null;
            lastCount = "";
            while ((getCount = SR.ReadLine()) != null)
            {
                lastCount = lastCount + getCount;
            }
            SR.Close();
        }
        catch (Exception ex)
        {
            TextWriter TxtWtr = new StreamWriter(HttpContext.Current.Server.MapPath("~/Helpers/HitCounter.txt"));
            TxtWtr.WriteLine(Convert.ToString("1"));
            TxtWtr.Close();
            lastCount = "1";
        }
    }
}

我的问题是:

  1. 为什么此代码将计数器重新启动为零?
  2. 这样做的原因似乎是什么?
  3. 有没有办法调整代码,使计数器永远不会再次重新启动?

非常感谢您的帮助。我对asp.net mvc的了解还很少,请多多包涵。

编辑:

这是每次应用程序将计数器重新启动为 1 时生成的异常。

System.IO.IOException:进程无法访问文件“~\Helpers\HitCounter.txt”,因为它正被另一个进程使用。

在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径)

在 System.IO.FileStream.Init(字符串路径、FileMode 模式、FileAccess 访问、Int32 权限、Boolean useRights、FileShare 共享、Int32 bufferSize、FileOptions 选项、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath)

在 System.IO.FileStream..ctor(字符串路径、FileMode 模式、FileAccess 访问、FileShare 共享、Int32 bufferSize、FileOptions 选项)

在 System.IO.StreamWriter.CreateFile(字符串路径,布尔附加)

在 System.IO.StreamWriter..ctor(字符串路径,布尔附加,编码编码,Int32 缓冲区大小)

在 System.IO.StreamWriter..ctor(字符串路径)

在 ~\Helpers\HitCounterAttribute.cs:line 14 中的 Application.Helpers.HitCounterAttribute.OnActionExecuted(ActionExecutedContext filterContext)

*cs:line 14 是代码:base.OnActionExecuted(filterContext);

另外,我注意到这种情况每天晚上都会发生。由于忙于其他事情,我无法掌握确切的时间。但我确信这种情况每天都在发生。

4

0 回答 0