Уведомление при изменении файла?

Есть ли какой-то механизм, с помощью которого я могу быть уведомлен (в С#), когда файл изменен на диске?

Ответ 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