System.IO.FileSystemWatcher
public static async Task Main(string[] args)
{
string dir = @"C:\tmp";
var watcher = new System.IO.FileSystemWatcher();
watcher.Path = dir;
//watcher.NotifyFilter = ; //Add filters if desired
watcher.Filter = "*.*";
watcher.Changed +=
(source, e) => Console.WriteLine($"{DateTime.UtcNow}: {e.ChangeType} {e.FullPath}");
watcher.Created +=
(source, e) => Console.WriteLine($"{DateTime.UtcNow}: {e.ChangeType} {e.FullPath}");
watcher.EnableRaisingEvents = true;
Console.ReadLine();
}
Пример вывода
15/10/2019 00:49:24: Created C:\tmp\New Text Document.txt
15/10/2019 00:49:30: Changed C:\tmp\New Text Document.txt
15/10/2019 00:49:30: Changed C:\tmp\New Text Document.txt
Directory.GetLastWriteTimeUtc
Если вы просто хотите определить, есть ли новыефайлы в верхнем каталоге (нет в подкаталогах) вы можете использовать Directory.GetLastWriteTimeUtc(String)
.
Обратите внимание на примечание:
Этот метод может возвращать неточное значение, потому что он использует nativeфункции, значения которых не могут постоянно обновляться операционной системой.
Наивный
Для полноты здесь приведено очень явное решение для жесткого диска.
string dir = @"C:\tmp";
while (true)
{
Console.WriteLine($"");
var desiredSinceUtc = DateTime.UtcNow.AddSeconds(-5);
var files = System.IO.Directory.EnumerateFiles(dir, "*", System.IO.SearchOption.AllDirectories);
var freshFiles = files.Where(f => System.IO.File.GetLastWriteTimeUtc(f) > desiredSinceUtc);
foreach ( var f in freshFiles )
{
Console.WriteLine($"\t{f}");
}
await Task.Delay(TimeSpan.FromSeconds(5));
}