Похоже, вашей самой большой проблемой было бы иметь дело с несколькими экземплярами программы, наступающими друг на друга и обрабатывающими одни и те же файлы.
Способ, которым я занимался в прошлом, заключается в том, чтобы программа захватила первый файл и сразу же переименовала его из «filename.txt» в «filename.txt.processing». Процессы будут настроены так, чтобы игнорировать любой файл, оканчивающийся на «.processing», чтобы они не наступали друг на друга. Я не думаю, что переименование файла является абсолютно атомарным, но у меня никогда не было проблем с ним.