Страницы

Поиск по вопросам

вторник, 12 марта 2019 г.

Windows-сервис для мониторинга папки и загрузки файлов в БД

Стоит задача разработать сервис, который будет использовать в качестве входа папку на локальном диске и при появлении в ней файлов, сервис должен осуществлять их парсинг, после чего полученные данные укладывать в БД. Нюанс в том, что файлы приходят "парами" (01012015.xml + 01012015.txt), и скидываются в папку круглосуточно по FTP. Разрабытываю Windows Service (C#).Пытался итеративно (каждую секунду) вызывать метод EnumerateFiles в папке, группировать их, затем парсить и полученные данные укладывать в БД. Однако в результате периодически выскакивают исключения (либо файл ещё не польностью загружен через FTP, либо к нему нет пары и т.п.). При добавлении многопоточности ошибок ещё больше. Интересует, существуют ли какие-либо готовые решения на такой случай?


Ответ

У меня была аналогичная задачка.
В основном потоке программы делаете интерфейс и управление.
Сканирование папки с данными можно оставить в 1 служебном потоке - все равно все ограничивается "однопоточным" I/O (и соответственно только в нем решать изолированный вопрос сканирования папки). А вот укладчики в БД сделать воркерами, которых создать, например штук N и которым раздавать данные.
Я бы поколдовал с попыткой открытия файла на запись (или, как подсказывают, FileAccess.Read, FileShare.Read). Пока он не загружен, ОС такого доступа к нему не даст. (тут могут быть и более правильные решения). И так же проверять парность. И только тогда добавлять файлы в список "для обработки", из которого разбирать их воркерами (с использованием крит.секции).

Комментариев нет:

Отправить комментарий