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 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);

また、これは毎日夜間に発生することに気付きました。別の用事で忙しかったので、正確な時刻を捉えることができませんでした。しかし、私はこれが毎日起こると確信しています。

4

0 に答える 0