У меня есть старое родное приложение, написанное на Borland Delphi:
Приложение взаимодействует со специальным оборудованием и создает / сохраняет свои данные вБаза данных BDE / Borland Paradox в файле .db
.Я не являюсь автором этого приложения, и компания, которая его создала, давно ушла.
Мне нужно добавить некоторые пользовательские функции в это приложение, а именно, чтобы иметь возможность читать базу данных, когда определенное оборудование связанособытие происходит.Я нашел старую библиотеку C, которая позволяет мне читать файл .db парадокса.Итак, эта часть покрыта.
То, что я сейчас пытаюсь выполнить, - это найти способ отследить момент, когда это приложение записывает в свой файл .db
.Поэтому я решил попробовать в своем тестовом приложении следующее:
static void Main(string[] args)
{
string path = "C:\\Program Files\\Company Name\\logfile.db";
string strDirName = Path.GetDirectoryName(path);
string strFileName = Path.GetFileName(path);
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = strDirName;
watcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime | NotifyFilters.FileName | NotifyFilters.LastAccess |
NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size;
watcher.Filter = strFileName; // "*.db";
watcher.IncludeSubdirectories = false;
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
watcher.Error += new ErrorEventHandler(OnError);
watcher.EnableRaisingEvents = true;
Console.WriteLine("Starting the watch...");
Console.WriteLine("Folder: " + watcher.Path);
Console.WriteLine("File: " + watcher.Filter);
while (true)
{
watcher.WaitForChanged(WatcherChangeTypes.All);
Console.WriteLine("-next-");
}
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
Console.WriteLine("-\"" + e.FullPath + "\", type=" + e.ChangeType + ", time=" + DateTime.Now);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
Console.WriteLine("-\"{0}\" renamed to \"{1}\"", e.OldFullPath, e.FullPath);
}
private static void OnError(object source, ErrorEventArgs e)
{
Console.WriteLine("#error: \"" + e.ToString() + "\", time=" + DateTime.Now);
}
Проблема заключается в том, что оно, похоже, не видит каких-либо изменений в базе данных.
Если я тестирую его сФайл .txt, открыв его в блокноте и сохранив с некоторыми изменениями, работает нормально.Но не с приложением, которое мне нужно.
Вот как я знаю, что оно не работает:
Приложение уже запущено.
Я запускаю свое приложение рядом с ним.Это не показывает ошибок или исключений.Итак, я знаю, что моя функция watcher.WaitForChanged
запущена.
Я ожидаю регистрации события оборудования в соответствующем приложении.
Мое тестовое приложение не видит никаких изменений.
Затем я копирую файл logfile.db
, в то время как приложение и мое тестовое приложение все еще выполняется, а затем открываю его в моемноутбук с программой просмотра Paradox DB.И он показывает новую запись в базе данных.
Так почему FileSystemWatcher
не перехватывает изменение файла logfile.db
?
PS.Я делаю все это на 64-битной версии Windows 7 Pro.