C#无法检测到用PHP编辑的文本文件

3

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

这段代码可以正常工作,如果我在我的电脑上或者其他有访问权限的电脑上更改文件夹中的文本文件,应用程序就会调用。 但是如果PHP更改文本文件,则不会发生任何事情,但最后修改日期确实会更新。 有人对此有经验吗?
2个回答

1

你可以尝试将NotifyFilter更改为NotifyFilters.LastWrite吗?或者如果你想要同时监视,可以更改为NotifyFilters.LastWrite | NotifyFilters.LastAccess

另外,如果文件是由PHP创建的,你可能想要添加一个事件处理程序到watcher.Created中。


谢谢回复!我已经尝试了LastWrite,但它还是有同样的问题。不过我会尝试使用Created,并在调用后删除文件。 - Bas Peters

1

1
谢谢回复!我可能会放弃使用FileSystemWatcher,改为使用定时器每x秒检查文本文件。 - Bas Peters
没问题!这里要简单得多,也更容易调试。 - Kevin Le

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接