Я хочу отслеживать файл журнала нашей АТС на предмет изменений.Я сделал небольшую программу, которая делает это с FileSystemWatcher
.
. Теперь становится странно: FileSystemWatcher
никогда не запускает Changed
-Event, когда я просто запускаю программу.Несмотря на то, что файл журнала действительно изменился.Но когда я открываю каталог в проводнике Windows, где находится файл журнала, программа работает, как ожидалось.Но только до тех пор, пока окно обозревателя остается открытым ... что за ..?
Операционная система: Windows Server 2008 R2
РЕДАКТИРОВАТЬ: Извините, вот код:
class Program
{
static void Main(string[] args)
{
new LogFileWatcher(@"C:\PBX\Dial.log");
System.Console.Read();
}
}
public class LogFileWatcher
{
public string LogFilePath { get; private set; }
private DateTime _lastLogFileWriteTime;
public LogFileWatcher(string path)
{
LogFilePath = path;
var directoryName = Path.GetDirectoryName(LogFilePath);
var fileName = Path.GetFileName(LogFilePath);
var fsw = new FileSystemWatcher { Path = directoryName, Filter = fileName };
fsw.Changed += fsw_Changed;
fsw.EnableRaisingEvents = true;
}
private void fsw_Changed(object sender, FileSystemEventArgs e)
{
// Get and fix the last write time of the log file
var fixLastWriteTime = File.GetLastWriteTime(LogFilePath);
// Don't do anything when file didn't change since last time
if (fixLastWriteTime == _lastLogFileWriteTime) return;
Console.WriteLine("File changed on: {0} - ID:{1}", DateTime.Now.ToLongTimeString(), Guid.NewGuid());
// Save last write time of the log file
_lastLogFileWriteTime = fixLastWriteTime;
}
}
EDIT2: Может быть, это важно: файл журнала используется Windows-Service УАТС!Я могу открыть его с помощью Блокнота.