我在Linux服务器上有一个PHP网站。我在网站上的电话号码旁边做了一个按钮,用于在服务器上写入一个带有该号码的文本文件。以下代码有效。
$file = './gebruikers/'.$naam.'/nummer.txt';
$write = $_POST['num'];
file_put_contents($file, $write);
现在我用TAPI3创建了一个C#应用程序来调用该文本文件中的数字。 我使用FileSystemWatcher(观察者)来检查php保存文本文件的文件夹,以便每次文件更新时都会调用它。
以下代码检查选择了哪个用户,以便为该文本文件监视该用户的文件夹。
private void cbGebruikers_SelectedIndexChanged(object sender, EventArgs e)
{
if(cbGebruikers.Text != "")
{
comboBox1.Enabled = true;
button6.Enabled = true;
lblGebruiker.Visible = false;
lblTelefoon.Visible = true;
}
path = @"\\192.168.1.9\SB Alarm programma\web-sb\gebruikers\" + cbGebruikers.Text;
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastAccess;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
lbltest.Text = watcher.Path.ToString();
}
当文本文件更改时,将执行以下代码。
private void OnChanged(object sender, FileSystemEventArgs e)
{
try
{
watcher.EnableRaisingEvents = false;
telnummer = File.ReadAllText(path + "/nummer.txt");
nummer = "0" + telnummer;
this.Invoke((MethodInvoker)delegate
{
txtNummer.Text = nummer;
MakeCall(nummer);
});
}
finally
{
watcher.EnableRaisingEvents = true;
}
}
此代码有效,如果我更改了我的PC上的文件夹中的文本文件或可以访问该应用程序进行呼叫的文件夹的另一台PC上的文本文件。 但是如果PHP更改文本文件没有任何反应,但上次修改日期确实会更新。
有人有过这方面的经验吗?
答案 0 :(得分:1)
您可以尝试将NotifyFilter
更改为NotifyFilters.LastWrite
吗?或者,如果您想同时监控两者,请更改为NotifyFilters.LastWrite | NotifyFilters.LastAccess
。
此外,如果文件是由PHP创建的,您可能希望向watcher.Created
添加事件处理程序。
答案 1 :(得分:1)
这看起来像是在跨平台架构中使用FileSystemWatcher的问题。 FileSystemWatcher通过打开与远程服务器的连接来工作,远程服务器的责任是在指定文件发生更改时作出响应。 Windows平台使用Win32 ReadDirectoryChanges(),而Linux框使用Inotify API。因为两个API之间没有接口,所以Linux框无法响应FileSystemWatcher。
相关链接 http://msdn.microsoft.com/en-us/library/aa365465.aspx http://www.mono-project.com/docs/faq/technical/