2009-03-30 2 views
0

Мне нужно найти и контролировать все фотографии на жестком диске или в папке для органайзера фотографий. В настоящее время я делаю это наивно: рекурсивно перемещается, вручную маркирует папки как индексированные и повторяя этот процесс, чтобы поймать, когда фотографии добавляются или перемещаются.Есть ли лучшие практики или трюки для индексирования/мониторинга диска для файлов?

Проблема с достаточно большим деревом папок, это очень дорого, поэтому я ищу советы, чтобы сделать это по-другому и/или советы по поддержанию этого процесса с низким процессором.

Идеально решения не зависят от платформы.

EDIT: В настоящее время я использую xulrunner, но могу скомпилировать модуль для конкретной платформы.
Как насчет первого запуска? Нет ли решения (даже зависящего от платформы), кроме того, что можно запустить вручную все дерево папок.

+0

Какая операционная система? –

ответ

5

В идеале решения не зависят от платформы.

Невозможно. У Win32API есть FindFirstChangeNotification, Linux isotify (и другие), Mac OS X имеет FSEvents и т. Д. Это очень низкоуровневый материал, и ни одна ОС не делает его такой же, как любая другая ОС. Если вы хотите что-то кросс-платформенное, вам нужно найти API с несколькими backend, которые работают на платформах, которые вы хотите, но если они есть, я их еще не нашел.

0

Я не знаю, как это сделать на платформе независимо, но в Linux я зацепил бы inotify, чтобы называть что-то, когда файл добавляется или обновляется. Вы могли бы даже использовать inotify-tools для запуска скрипта, когда это произойдет, поэтому вам не нужно все время запускать все эти события, если они нечасты. Просто обновите скрипт базы данных и, возможно, уведомите свою галерею/программу отображения, если она запущена.

0

Вы кодируете .NET? Если это так, вы можете использовать класс FileSystemWatcher.

0

Почему бы не использовать программу filewatcher, которая будет уведомлять вас об изменениях в конкретных деревьях папок?

Если вы хотите написать свой собственный, вы можете использовать класс FileSystemWatcher для этого.

0

Пару лет назад я портировал некоторые функции Windows API для Linux, как (FindFirstChangeNotification, FindCloseChangeNotification ...) он имеет некоторые ограничения, но за то, что вам нужно этого может быть достаточно, пожалуйста, взгляните на: https://github.com/paulorb/FileMonitor