Существуют ли передовые практики или приемы для индексации / мониторинга диска для файлов? - PullRequest
0 голосов
/ 30 марта 2009

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

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

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

РЕДАКТИРОВАТЬ: я использую xulrunner в настоящее время, но может скомпилировать модуль для конкретной платформы.
Как насчет первого запуска? Разве нет решения (даже зависящего от платформы), кроме ручного запуска всего дерева папок.

Ответы [ 6 ]

5 голосов
/ 30 марта 2009

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

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

0 голосов
/ 07 ноября 2017

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

0 голосов
/ 26 января 2015

Один ответ с 2014 года - сторож Facebook: https://facebook.github.io/watchman/

0 голосов
/ 30 марта 2009

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

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

0 голосов
/ 30 марта 2009

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

0 голосов
/ 30 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...