【解決方法】C#コンソールプログラムを使用して特定のファイルが削除されたときに、実行中のexeを強制終了するにはどうすればよいですか


やあ、

特定のパスのファイルが削除された場合、プログラムは実行中のexeプログラムを強制終了し、5分間スリープして、ソフトウェアが同じexeを自動的に再起動する必要があります。 ファイルがディレクトリに存在する場合、ファイルは何もせず、単に 5 分間スリープします。 このプログラムは継続的に実行され、ファイルが存在するか削除されているかを 5 分ごとに確認し、その結果に基づいてアクションを実行する必要があります。

ここで私のコードは正常に動作していますが、以下の問題があります。

一度誰かがファイルを削除すると、ファイルが戻ってくるか、何日も戻ってこないことがあります。 コードを実行したときに、フォルダーからファイルを削除すると、5 分ごとに exe ファイルが強制終了され続けます。 ただし、このサイクルで既にファイルが削除されてexeを強制終了したため、次のサイクルでは、ファイルがなくてもexeを強制終了しないように、そのようにすべきではありません。 ファイルが再び戻ってきて削除された場合にのみ、強制終了する必要があります。

私が試したこと:

C#
<pre>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                string path = "C:\\Experiment\\folder\\database\\data.tou";
                if (File.Exists(path))
                {
                    Thread.Sleep(60000);
                }
                else
                {
                    Process[] pname = Process.GetProcessesByName("notepad");
                    if (pname.Length > 0)
                    {
                        pname[0].Kill();
                    }
                    else
                    {
                        
                    }
                }
                Thread.Sleep(60000);
            }
        }
    }
}

解決策 1

「外部プロセスを強制終了しました」というフラグを追加します。
強制終了する場合は true に設定し、ファイルが存在する場合は false に設定します。
あとは、EXE を強制終了する直前に確認するだけです。

高度なバージョンでは、アプリの終了時と開始時に設定ファイルにフラグを保存して復元します。

解決策 2

Griffs のアドバイスに加えて、別のオプションとして、
FileSystemWatcher クラス (System.IO) | マイクロソフト ラーン[^]

コメント

タイトルとURLをコピーしました