C# 未检测到使用 PHP 编辑的文本文件

C# doesn't detect text file that was edited with PHP

我在 Linux 服务器上有一个 PHP 网站。我在网站上的 phone 数字旁边做了一个按钮,用该数字在服务器上写入一个文本文件。以下代码有效。

$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 更改文本文件,则不会发生任何事情,但最后修改日期会更新。

有人对此有经验吗?

你能试试把NotifyFilter改成NotifyFilters.LastWrite吗?或者,如果您想同时监控两者,请更改为 NotifyFilters.LastWrite | NotifyFilters.LastAccess.

此外,如果文件是由 PHP 创建的,您可能需要向 watcher.Created 添加事件处理程序。

这看起来像是在跨平台架构中使用 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/