Получение точных изменений файла C #

c# filesystemwatcher

674 просмотра

2 ответа

0 Репутация автора

Я написал программу на C #, программа читает файл, и когда что-то в файле изменяется, запускается метод OnFileChanged. И это работает. Но теперь я хочу получить новые точные строки, которые есть в моем файле. Так что, возможно, у меня есть строка, в которой находятся новые строки. В файл могут входить только новые строки.

Это мой FileSystemWatcher, который работает:

FileSystemWatcher fileWatcher = new FileSystemWatcher();
  fileWatcher.Path = Path.GetDirectoryName(filePath);
  fileWatcher.Filter = Path.GetFileName(filePath.Split(backslashSeperator).Last());
  fileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName;
  fileWatcher.Changed += new FileSystemEventHandler(OnFileChanged);
  fileWatcher.EnableRaisingEvents = true;

и это мой метод OnFileChanged:

 public static void OnFileChanged(object source, FileSystemEventArgs e) {

}

теперь я хочу иметь строку с точными изменениями строки в моем файле.

Автор: user6606861 Источник Размещён: 19.07.2016 06:39

Ответы (2)


1 плюс

24559 Репутация автора

FileSystemWatcher API не предоставляет старую версию файла.

Вам нужно где-то сохранить последнее состояние файла, а затем, когда он в следующий раз изменится, вам нужно следовать алгоритму различия текста, чтобы получить разницу между двумя наборами.

Автор: Zein Makki Размещён: 19.07.2016 06:42

1 плюс

2562 Репутация автора

Я предполагаю, что это не возможно напрямую. Ваша программа уведомлена об изменении файла событием из файловой системы. Файловая система не проверяет наличие определенных строк, которые были изменены. В конце концов: измененный файл может быть двоичным файлом, изображением, zip-файлом и т. Д.

Вы должны будете реализовать такую ​​логику самостоятельно. Создайте где-нибудь копию файла, а затем, когда получите Changeсобытие, вы сравните резервную копию с файлом actall и рассчитаете изменения.

Или, может быть, вы используете какой-то инструмент сравнения, например, встроенный git, но я понятия не имею, как это сделать :)

Автор: David Votrubec Размещён: 19.07.2016 06:44
Вопросы из категории :
32x32