カウンターはテキスト ファイルに保存されます。私の問題は、知らないうちにカウンターがゼロから再開することです。今のところ一度だけ経験しました。しかし、コードがカウンターを再起動する理由を知りたいです。コードは次のとおりです。
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 errorCode、文字列の多分フルパス) で
System.IO.FileStream.Init (文字列パス、FileMode モード、FileAccess アクセス、Int32 権限、ブール型 useRights、FileShare 共有、Int32 bufferSize、FileOptions オプション、SECURITY_ATTRIBUTES secAttrs、文字列 msgPath、ブール型 bFromProxy、ブール型 useLongPath) で
System.IO.FileStream..ctor (文字列パス、FileMode モード、FileAccess アクセス、FileShare 共有、Int32 bufferSize、FileOptions オプション) で
System.IO.StreamWriter.CreateFile (文字列パス、ブール値の追加) で
System.IO.StreamWriter..ctor (文字列パス、ブール値の追加、エンコーディング エンコーディング、Int32 bufferSize) で
System.IO.StreamWriter..ctor (文字列パス) で
~\Helpers\HitCounterAttribute.cs:line 14 の Application.Helpers.HitCounterAttribute.OnActionExecuted(ActionExecutedContext filterContext) で
*cs: 14 行目はコードの場所です: base.OnActionExecuted(filterContext);
また、これは毎日夜間に発生することに気付きました。別の用事で忙しかったので、正確な時刻を捉えることができませんでした。しかし、私はこれが毎日起こると確信しています。