Есть ли какой-то механизм, с помощью которого я могу быть уведомлен (в С#), когда файл изменен на диске?
Уведомление при изменении файла?
Ответ 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