Похоже, вы хотите писать в свой файл журнала, когда ваш файл журнала читается извне, или что-то в этом роде. Если это так, есть значение NotifyFilters, LastAccess. Убедитесь, что это установлено в качестве одного из флагов в вашем свойстве FileSystemWatcher.NotifyFilter. Изменение времени последнего доступа вызовет событие Changed в FileSystemWatcher.
В настоящее время FileSystemWatcher не позволяет напрямую различать чтение и изменение; они оба запускают событие Changed на основе «изменения» в LastAccess. Таким образом, было бы невозможно следить за чтением большого количества файлов. Однако вы, кажется, знаете, какой файл вы просматриваете, поэтому, если у вас есть объект FileInfo для этого файла, а FileSystemWatcher запустил свое событие Changed, вы можете получить новый и сравнить значения LastAccessTime. Если время доступа изменилось, а LastWriteTime не изменилось, ваш файл только читается.
Проще говоря, изменения, которые вы вносите в файл во время его чтения, не будут немедленно отображаться в другом приложении, и вы не сможете «дойти туда первым», заблокировать файл и записать в него. прежде чем они это увидят. Таким образом, вы не можете использовать FileSystemWatcher для «перехвата» запроса на чтение и отображения содержимого, которое вы хотите, чтобы это приложение увидело. Единственный способ, которым пользователь другого приложения может увидеть то, что вы только что написали, — это если приложение также просматривает файл и повторно загружает файл. Это вызовет другое событие Changed, вызывающее бесконечный цикл, пока другое приложение продолжает перезагружать файл.
Вы также получите событие Changed для чтения и записи. Открытие файла в текстовом редакторе (подойдет практически любой), внесение некоторых изменений, а затем сохранение вызовет два события Changed, если вы ищете изменения во времени последнего доступа. Первый погаснет при открытии файла редактором; в это время вы, возможно, не сможете сказать, что произойдет запись, поэтому, если вы ищете чистый доступ только для чтения к файлу, тогда вы SOL.
person
KeithS
schedule
01.09.2010