Страницы

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

среда, 22 января 2020 г.

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

#c_sharp #многопоточность #windows_service


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


Ответы

Ответ 1



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

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

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