У меня есть сайт PHP на сервере Linux. Я сделал кнопку рядом с телефонными номерами на сайте, которая пишет текстовый файл на сервере с этим номером. Следующий код работает.
$file = './gebruikers/'.$naam.'/nummer.txt';
$write = $_POST['num'];
file_put_contents($file, $write);
Теперь я сделал приложение на C # с TAPI3 для вызова номера в этом текстовом файле.
Я использую FileSystemWatcher (watcher), чтобы проверить папку, в которой 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 изменяет текстовый файл, ничего не происходит, но дата последнего изменения обновляется.
У кого-то есть опыт с этим?
Это похоже на проблему с использованием 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/
Можете ли вы попробовать изменить NotifyFilter
в NotifyFilters.LastWrite
? Или, если вы хотите контролировать оба, измените на NotifyFilters.LastWrite | NotifyFilters.LastAccess
,
Также, если файл создан PHP, вы, вероятно, захотите добавить обработчик событий в watcher.Created
,