2013-03-06 105 views
1

我是c#的新手,所以請原諒我的無知,我正在文本文件上運行fileSystemWatcher。它工作正常,我可以在文件更改後執行一些簡單的任務。除了我想要做的所有事情之外。 我想讀的是已與該代碼在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; 
    } 
} 

它工作正常,按鈕內,但沒有文件後改變守望文本文件的最後一行。 說它找不到文件?

+0

你可以在一個按鈕裏面放一些關於你的意思的細節,但不是在文件監視器之後?也許更多的代碼? – 2013-03-06 13:16:05

回答

0

要注意的一件事是FSW可以在保存操作期間發出多個更改通知。您無法知道保存何時完成。因此,您需要始終將代碼封裝在try..catch塊中,並在超時後支持重試以允許完成文件寫入。通常,我會嘗試將文件移到一個臨時位置,在那裏我將執行我的處理。如果移動失敗,請等待幾秒鐘,然後重試。

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; 
    } 
} 
0

吉姆伍利解釋了他的答案,文件操作可能仍然在進步,當FSW觸發一個CreatedChanged事件。如果使用FSW在兩個應用程序之間進行通信,並且您也在控制「發送」應用程序,則可以按如下方式解決問題:

將信息寫入臨時文件。關閉文件。重命名臨時文件併爲其指定一個明確的名稱。

在其他應用程序(接收方)觀看Renamed事件使用FileSystemWatcher。重命名的文件保證完整。

相關問題