Ответ 1
Это было действительно ошеломляюще... когда вы попробуете мою примерную программу ниже и измените файл в VS, вы заметите две строки в окне вывода:
Удалено
Переименован
Итак, Visual Studio никогда не меняет существующий файл, он сохраняет константы в новый файл с временным именем, затем удаляет исходный файл и переименовывает новый файл в старое имя.
Собственно, это хорошая практика, потому что, если вы делаете это обычным способом (просто записывая измененный файл, что приведет к запуску события Changed
), обработчик события может быть вызван до того, как процесс записи будет полный. Если обработчик событий обрабатывает содержимое файла, это может вызвать проблемы, поскольку он обрабатывает неполный файл.
Другими словами: это не ошибка, это особенность; -)
static class Program
{
[STAThread]
static void Main()
{
FileSystemWatcher FSW = new FileSystemWatcher("c:\\", "*.cs");
FswHandler Handler = new FswHandler();
FSW.Changed += Handler.OnEvent;
FSW.Created += Handler.OnEvent;
FSW.Deleted += Handler.OnEvent;
FSW.Renamed += Handler.OnEvent;
FSW.EnableRaisingEvents = true;
System.Threading.Thread.Sleep(555000);
// change the file manually to see which events are fired
FSW.EnableRaisingEvents = false;
}
}
public class FswHandler
{
public void OnEvent(Object source, FileSystemEventArgs Args)
{
Console.Out.WriteLine(Args.ChangeType.ToString());
}
}
}