Есть ли какой-то механизм, с помощью которого я могу быть уведомлен (в С#), когда файл изменен на диске?
Уведомление при изменении файла?
Ответ 1
Это будет System.IO.FileSystemWatcher.
Ответ 2
Вы можете использовать класс FileSystemWatcher.
public void CreateFileWatcher(string path)
{
    // Create a new FileSystemWatcher and set its properties.
    FileSystemWatcher watcher = new FileSystemWatcher();
    watcher.Path = path;
    /* Watch for changes in LastAccess and LastWrite times, and 
       the renaming of files or directories. */
    watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite 
       | NotifyFilters.FileName | NotifyFilters.DirectoryName;
    // Only watch text files.
    watcher.Filter = "*.txt";
    // Add event handlers.
    watcher.Changed += new FileSystemEventHandler(OnChanged);
    watcher.Created += new FileSystemEventHandler(OnChanged);
    watcher.Deleted += new FileSystemEventHandler(OnChanged);
    watcher.Renamed += new RenamedEventHandler(OnRenamed);
    // Begin watching.
    watcher.EnableRaisingEvents = true;
}
// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e)
{
    // Specify what is done when a file is changed, created, or deleted.
   Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}
private static void OnRenamed(object source, RenamedEventArgs e)
{
    // Specify what is done when a file is renamed.
    Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
}
		Ответ 3
Используйте FileSystemWatcher. Вы можете фильтровать только события модификации.
Ответ 4
Отправить письмо при изменении файла... Код ниже
           FileInfo fi1 = new FileInfo(fileLocation);
           DateTime lastWritetoFile = DateTime.Parse(fi1.LastWriteTime.ToString()); // 10/04/2019 15:40:17
           //I'm Storing last change in DB
           DateTime lastFileChange = DateTime.Parse(lastChange); //10/04/2019 14:40:17
            if(fi1.Exists)
            {
                if (lastWritetoFile > lastFileChange)
                {
                    sendEmailAlertFileChanged(email);
                    UpdateDb(lastWritetoFile, ID);
                }
            }
            else
            {
                sendEmailAlertFileNotFound(email1);
            }
        private static void sendEmailAlertFileChanged(string email)
        {
            MailMessage mail = new MailMessage("email from...", "email to....");
            SmtpClient client = new SmtpClient();
            client.Port = 587;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = true;
            client.Credentials = new NetworkCredential("login to email...", "password to email");
            client.EnableSsl = true;
            client.Host = "smtp.gmail.com";
            mail.Subject = "this is my test subject";
            mail.Body = "this is my test body";
            client.Send(mail);
        }
 Если вы запустили приложение и у вас возникла ошибка, убедитесь, что у вас менее безопасный доступ к приложению в учетной записи Google, вы можете найти его здесь:
https://myaccount.google.com/lesssecureapps?utm_source=google-account&utm_medium=web