Good day. I am trying to write a tiny c # program that will monitor the activity of a given folder and display information about the last change time in Label. Tried to implement this process through While:

public partial class Form1 : Form { bool start = true; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { button1.Text = ("Начать проверку"); button2.Text = ("Остановить проверку"); } private void button1_Click(object sender, EventArgs e) { while (start == false) { DirectoryInfo dir = new DirectoryInfo(@"C:\Users"); label1.Text = ("Полный путь: " + dir.FullName); label2.Text = ("Последнее обновление: " + dir.LastWriteTime); } } } 

But, this sample code does nothing at all.

  • one
    Well, of course, start is equal to true everywhere, and you check that it is false - Alexey Sarovsky
  • while (true) is true! while (false) is double true! - Athari pm
  • 6
    I would strongly advise using the specially trained FileSystemWatcher class instead of an infinite loop. - Dmitry D.

1 answer 1

Link:

Here is a link to familiarize yourself with monitoring file system events !

There it is just written about monitoring file system events and there are examples.

FileSystemWatcher.Changed - the event occurs when a file or directory changes in the specified Path .

FileSystemWatcher.Renamed - an event occurs when a file or directory is renamed in the specified Path .

The Changed event occurs unexpectedly when a file is renamed, but it does not occur when a directory name is changed.

To track renames, use the Renamed event.

Example:

 public class Watcher { public static void Main() { Run(); } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public static void Run() { string[] args = System.Environment.GetCommandLineArgs(); // If a directory is not specified, exit program. if(args.Length != 2) { // Display the proper way to call the program. Console.WriteLine("Usage: Watcher.exe (directory)"); return; } // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = args[1]; /* 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; // Wait for the user to quit the program. Console.WriteLine("Press \'q\' to quit the sample."); while(Console.Read()!='q'); } // 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); } } 
  • Try to write more detailed answers. Add to the answer the minimum required solution example (information on the link can be deleted and the answer will lose value). - Nicolas Chabanovsky