![](/img/trans.png)
[英]Reading the last line of a text file after FileSystemWatcher detects change
[英]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触发Created
或Changed
事件时,文件操作可能仍在进行中。 如果使用FSW在两个应用程序之间进行通信,并且您也可以控制“发送”应用程序,则可以解决以下问题:
将信息写入临时文件。 关闭文件。 重命名临时文件,并为其指定一个明确的名称。
在另一个应用程序(接收者)中,使用FileSystemWatcher
监视Renamed
事件。 重命名的文件可以保证是完整的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.