Сценарий заключается в том, что у меня есть корневая папка для наблюдения за любой новой папкой (которая содержит файлы) и я настроил таймер для архивирования каждой из них по отдельности. Тем не менее, я не могу сказать, является ли файл в папке последним файлом перед вызовом функции zip, и поэтому я хочу сбросить таймер для этой папки всякий раз, когда перед созданием архива создается новый файл.
Я использую FileSystemWatcher
для мониторинга как корневой папки, так и ее подпапок.
- Я не уверен, как создать еще один наблюдатель для наблюдения за созданием файла, возможно, в методе OnTimedEvent.
- Я не знаю, как сбросить таймер после обнаружения файла в этой папке. Я думаю также написать код в OnTimedEvent, чтобы сбросить его.
Ниже приведена часть моего попытанного кода, а исходный код можно найти здесь . Любая помощь будет высоко оценена.
public class FileWatcher
{
private FileSystemWatcher _watcherRoot;
private Timer _timer;
private readonly string _watchedPath;
public FileWatcher(string path)
{
// _watcher = new FileSystemWatcher();
_timer = new Timer();
_watchedPath = path;
InitWatcher();
}
public void InitWatcher()
{
_watcherRoot = new FileSystemWatcher();
_watcherRoot.Path = _watchedPath;
_watcherRoot.IncludeSubdirectories = true;
_watcherRoot.EnableRaisingEvents = true;
_watcherRoot.Created += new FileSystemEventHandler(OnCreated);
}
private void OnCreated(object sender, FileSystemEventArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Created)
{
string fullPath = e.FullPath;
if (sender == _watcherRoot)
{
// If detect new folder, set the timer to 5 sec
_timer.Interval = 5000;
_timer.Elapsed += OnTimedEvent;
_timer.AutoReset = true;
_timer.Enabled = true;
// a directory
Console.WriteLine($"{fullPath.ToString()} created on {DateTime.Now}");
}
}
}
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
// Create a 2nd Watcher??
// Reset the timer in here??
}