我的计数器保存在文本文件中。我的问题是计数器在我不知情的情况下从零重新启动。我暂时只经历过一次。但我想知道为什么代码会重新启动计数器。这是代码:
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";
}
}
}
我的问题是:
- 为什么此代码将计数器重新启动为零?
- 这样做的原因似乎是什么?
- 有没有办法调整代码,使计数器永远不会再次重新启动?
非常感谢您的帮助。我对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);
另外,我注意到这种情况每天晚上都会发生。由于忙于其他事情,我无法掌握确切的时间。但我确信这种情况每天都在发生。