我是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;
}
}
它在按钮内工作正常但在文件观察者之后没有。 说它找不到文件?
答案 0 :(得分:0)
需要注意的一点是,FSW可以在保存操作期间发出多个更改通知。您无法知道保存何时完成。因此,您需要始终将代码包装在try..catch块中,并在超时后支持重试以允许完成文件写入。通常,我会尝试将文件移动到临时位置,我将进行处理。如果移动失败,请等待几秒钟再试一次。
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
正如Jim Wooley在他的回答中解释的那样,当FSW发起Created
或Changed
事件时,文件操作可能仍在进行中。如果FSW用于在两个应用程序之间进行通信,并且您可以控制"发送"应用程序也可以解决问题如下:
将信息写入临时文件。关闭文件。重命名临时文件并为其指定一个名称。
在其他应用程序(接收方)中使用Renamed
监视FileSystemWatcher
事件。重命名的文件保证完整。