1

私は c# を初めて使用するので、私の無知を許してください。テキスト ファイルで fileSystemWatcher を実行しています。ファイルが変更された後、いくつかの簡単なタスクを実行できます。やりたいこと以外全部。このコードで変更されたテキスト ファイルの最後の行を読み込もうとしています

public void File_Changed( object source, FileSystemEventArgs e )
{
    string MACH1 = File.ReadText(@"C:\MACHINE_1.txt").Last();
    if (MACH1=="SETUP")
    {
        MACHINE1IND.BackColor = Color.Green; 
    }
    else
    {
        MACHINE1IND.BackColor = Color.Red; 
    }
}

ボタン内では正常に機能しますが、ファイルウォッチャーの後では機能しません。ファイルが見つからないと言いますか?

4

3 に答える 3

0

注意すべきことの 1 つは、保存操作中に FSW が複数の変更通知を発行できることです。保存がいつ完了したかを知る方法はありません。そのため、常にコードを try..catch ブロックでラップし、タイムアウト後の再試行をサポートして、ファイルの書き込みを完了できるようにする必要があります。通常、処理を行う一時的な場所にファイルを移動しようとします。移動に失敗した場合は、数秒待ってから再試行してください。

于 2013-03-06T13:58:48.040 に答える
0

Jim Wooley が彼の回答で説明しているように、FSW がCreatedorChangedイベントを発生させたとき、ファイル操作はまだ進行中の可能性があります。2 つのアプリケーション間の通信に FSW が使用されていて、「送信側」アプリケーションも制御している場合、次のようにして問題を解決できます。

情報を一時ファイルに書き込みます。ファイルを閉じます。一時ファイルの名前を変更し、明確な名前を付けます。

もう一方のアプリケーション (レシーバー) では、Renamedを使用してイベントを監視しFileSystemWatcherます。名前が変更されたファイルは完全であることが保証されます。

于 2013-03-06T14:17:44.763 に答える
0

アクセスする前に、ファイルが存在するかどうかを確認する必要があります。

public void File_Changed(object source, FileSystemEventArgs e)
{
    string filePath = @"C:\MACHINE_1.txt";
    if(!File.Exists(filePath)) //Checks if file exists
        return;
    string MACH1 = File.ReadText(filePath).Last();
    if (MACH1=="SETUP")
    {
        MACHINE1IND.BackColor = Color.Green; 
    }
    else
    {
        MACHINE1IND.BackColor = Color.Red; 
    }
}
于 2013-03-06T14:05:07.583 に答える