繁体   English   中英

FileSystemWatcher检测到更改后,读取文本文件的最后一行

[英]Read last line of text file after FileSystemWatcher detects change

我是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; 
    }
}

它在按钮内运行良好,但在文件监视程序之后则无法运行。 说找不到文件?

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

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

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

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

将信息写入临时文件。 关闭文件。 重命名临时文件,并为其指定一个明确的名称。

在另一个应用程序(接收者)中,使用FileSystemWatcher监视Renamed事件。 重命名的文件可以保证是完整的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM