Что касается записи файла с указанием списка файлов, которые будут добавлены в качестве первого шага, ваше приложение подхватывает его, читает его и затем ждет файлов, которые будут записаны. Когда окончательный файл написан, вы можете упаковать его и отправить. Таким образом, если инициируются несколько «транзакций», у вас не будет «конечных файлов», наступающих друг на друга. Присвойте файлу индикатора известное имя шаблона для поиска, которое вряд ли будет встречаться в обычных файлах, и предоставьте некоторые средства, чтобы несколько файлов индикаторов могли появляться в одно и то же время.
Если бы я реализовал что-то подобное, я бы, вероятно, использовал бы какое-нибудь имя файла, например ~<ANOTHER-UNIQUE-GUID>.tmp
, мой наблюдатель файловой системы наблюдал бы за одним файлом с таким именем формата, который, в свою очередь, велит другому наблюдателю файловой системы ждать файлы, перечисленные внутри. После удаления файлов временный файл может быть удален.
Такой подход может быть легко реализован, так что каждый из ваших наблюдателей не будет перебирать друг друга и передавать / удалять файлы, над которыми работают другие наблюдатели.
Как указывалось ранее, тем не менее, может быть более эффективно заархивировать файлы в один архив и использовать его, распаковывая их в месте назначения.