Мне нужен доступ к файлу для чтения и записи одного и того же ZIP-архива из разных потоков одновременно.
Каждый поток имеет свой собственный подкаталог внутри архива, поэтому конфликтов не будет, но я думаю, что операционная система не заботится об этом.
Для работы с ZIP я использую libzip. Как я могу выполнить доступ? Должен ли я заботиться о чем-то особенном?
Я мог бы распаковать архив при запуске приложения и сжать его при выходе, но я бы предпочел работать с архивом напрямую, поэтому я задаю этот вопрос.
Распаковка параллельно не должна быть такой сложной, но упаковка файла определенно будет нетривиальной /
К сожалению, имя каталогов на самом деле не имеет значения, если вы используете формат ZIP — заголовок, в котором хранится файл, — это просто структура с путем и именем файла в виде единого комка, а внутри zip не существует разных каталогов. -файл.
Данные не лучше, так как данные каждого файла просто сохраняются как один последовательный поток данных, следующий за предыдущим файлом и перед следующим файлом.
Можно, конечно, создать функциональность zip-архива, в которой подготовлены сжатые данные, как только данные заполнены, выделено пространство и добавлен заголовок в каталог — оба из них находятся под некоторой блокировкой, а затем данные могут быть записанный в настоящий файл без блокировок [хотя я не уверен, насколько хорошо он работает для записи в разные места файла без использования блокировок].
(Это довольно хорошо описано в википедии Вот, но это может быть не совсем понятно, если вы не изучали эти вещи, каковы будут последствия различных структур данных)
Других решений пока нет …