В ASP.NET я хотел бы сохранить объект в кеше, который зависит от всех файлов в определенной папке и ее подпапках. Простое добавление объекта с зависимостью от корневой папки не работает. Есть ли какой-либо разумный способ сделать это, кроме создания цепочки зависимостей для всех файлов?
Создайте зависимость кеша от папки и ее подпапки
comment
Сработало ли это решение, которое я дал? - вы можете использовать IncludeSubdirectories для их включения или исключения. Вы можете обнаружить проблемы из-за запуска нескольких событий. Проверьте msdn.microsoft.com/en-us/library/
- person Ramesh   schedule 13.02.2009
comment
Не знаю, пока не было времени проверить. Да ты это уже сказал.
- person AnthonyWJones   schedule 13.02.2009
Ответы (1)
Я считаю, что вы можете изменить свою собственную зависимость от кеша и использовать FileSystemMonitor для отслеживания изменений файловой системы.
Обновление: пример кода ниже
public class FolderCacheDependency : CacheDependency
{
public FolderCacheDependency(string dirName)
{
FileSystemWatcher watcher = new FileSystemWatcher(dirName);
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Deleted += new FileSystemEventHandler(watcher_Changed);
watcher.Created += new FileSystemEventHandler(watcher_Changed);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
}
void watcher_Renamed(object sender, RenamedEventArgs e)
{
this.NotifyDependencyChanged(this, e);
}
void watcher_Changed(object sender, FileSystemEventArgs e)
{
this.NotifyDependencyChanged(this, e);
}
}
person
Ramesh
schedule
12.02.2009
Вызывает ли FileSystemWatcher события при изменении файла в этом каталоге? FileSystemWatcher смотреть и все дерево или только верхний уровень?
- person AnthonyWJones; 12.02.2009
@AnthonyWJones — вы можете использовать IncludeSubdirectories, чтобы включать или исключать их. Вы можете обнаружить проблемы из-за запуска нескольких событий. Проверьте msdn.microsoft.com/en-us/library/
- person Ramesh; 12.02.2009
Это прекрасно работает. Но обратите внимание, что вам нужно установить EnableRaisingEvents=true, иначе ничего не получится.
- person richb; 09.09.2015