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

您必须在访问之前检查该文件是否存在。

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 回答
0

需要注意的一件事是 FSW 可以在保存操作期间发出多个更改通知。您无法知道保存何时完成。因此,您需要始终将代码包装在 try..catch 块中,并支持在超时后重试以完成文件写入。通常,我会尝试将文件移动到我将进行处理的临时位置。如果移动失败,请等待几秒钟,然后重试。

于 2013-03-06T13:58:48.040 回答
0

Created正如 Jim Wooley 在他的回答中解释的那样,当 FSW 触发或Changed事件时,文件操作可能仍在进行中。如果 FSW 用于在两个应用程序之间进行通信,并且您也控制“发送”应用程序,则可以通过以下方式解决问题:

将信息写入临时文件。关闭文件。重命名临时文件并给它一个明确的名称。

在另一个应用程序(接收器)中,Renamed使用FileSystemWatcher. 重命名的文件保证是完整的。

于 2013-03-06T14:17:44.763 回答