Не вижу перспективы для таких тем на этом сайте, но тем не менее, ради эксперимента. Авось гиперзнаток вправду чёто слышал об архитектуре программ и посоветует дельное))))

Моя утилита под Windows, безальтернативно Win32 API. GUI простейший, на стандартной форме три текстовых поля. Два для указания дисков\папок, третье только для цифр.

Задача: Отслеживать все изменения в первой указанной папке(и подпапках), проверять окончательный размер каждого вновь появившегося файла и если соответствует критерию, то копировать файл во вторую папку.

Всё усложняется особенностями API файловой системы, необходимостью отслеживать по возможности непрерывно, по возможности даже системные файлы, даже файлы блокированные другими приложениям, даже очень большие файлы, и естественно фильтровать свою собственную, копировальную деятельность)))

Я решил, что в программе должны действовать три функциональных блока: 1 GUI поток программы управляет фоновой работой двух других блоков 2 поток следит за изменениями в папке(и подпапках) и возвращает пути\файлы 3 поток работает со списком папок\файлов и инициирует копирование системой

На данном этапе придумываю формат данных и способ обмена ими между блоками.

Как бы вы разбили работу и организовали внутренний обмен?