Укажите порядок при распаковке файлов

Я использую библиотеку DotNetZip для программного архивирования файлов. Полученный zip-файл затем загружается на сервер с помощью SFTP.

Мой вопрос в том, могу ли я указать порядок, в котором файлы должны быть распакованы на сервере.

Я не уверен в работе, которая выполняет задачу распаковки.

Редактировать: zip состоит из 100 документов (обычно PDF) и 100 файлов метаданных для каждого из этих документов. Файлы метаданных заканчиваются на .metadata. Файл с таким расширением запускает задание на сервере для поиска документа, на который ссылаются метаданные. Я хотел бы, чтобы эти файлы .metadata были извлечены из zip после извлечения всех других обычных файлов.


person Nishant    schedule 12.07.2012    source источник
comment
Почему вы хотите разархивировать в определенном порядке? Результат одинаков в любом случае.   -  person Anirudh Ramanathan    schedule 12.07.2012
comment
Извиняюсь за абстрактность. Я добавил правку в вопрос.   -  person Nishant    schedule 12.07.2012
comment
Есть ли у вас какой-либо контроль над тем, как выполняется распаковка на стороне сервера?   -  person Anirudh Ramanathan    schedule 12.07.2012
comment
Обычный подход к такого рода вещам часто заключается в извлечении во временное место, а затем перемещении вещей в место получения. Таким образом, у вас не должно быть проблем с наполовину написанными файлами или порядком.   -  person Jon Egerton    schedule 12.07.2012
comment
Нет, я не контролирую сервер и механизм распаковки.   -  person Nishant    schedule 12.07.2012
comment
Я бы выбрал решение @JonEgerton. Извлеките во временное место, а затем переместите файлы.   -  person Anirudh Ramanathan    schedule 12.07.2012
comment
Невозможно гарантировать порядок распаковки, если у вас нет контроля над распаковщиком. Однако, если разархивировать просто - разархивируйте от начала до конца, тогда у вас может быть изменение: просто заархивируйте файлы в том порядке, в котором вы хотите   -  person Onkelborg    schedule 12.07.2012


Ответы (3)


Обычный подход к такого рода вещам часто заключается в извлечении во временное место, а затем перемещении вещей в место получения.

Таким образом, у вас не должно быть проблем с наполовину записанными файлами или упорядочением, а любые сбои при распаковке не оставят потребителя с половиной набора данных.

person Jon Egerton    schedule 12.07.2012

Я только что проверил это на своем сервере LAMP. Распаковка в моем случае происходит в следующем. вам нужно проверить это на своем сервере, чтобы найти его в вашем случае.

firstly
    Folders a,A,b,B....--->z (alphabetically)
secondly
    Files a,A,b,B....--->z (alphabetically)

Проверьте порядок распаковки в вашем случае и назовите файлы метаданных так, чтобы они оказались в начале или в конце списка, если это необходимо.

Или, как сказал @Onkelborg, в вашем случае операция распаковки может просто следовать порядку zip во время извлечения. Нет окончательного способа сказать, не протестировав его сначала.

Даже в этом случае может быть несколько потоков, выполняющих операцию, и вы можете столкнуться с проблемами, поэтому самый безопасный способ — распаковать файлы + метаданные во временное место, а затем переместить их в правильном порядке.

person Anirudh Ramanathan    schedule 12.07.2012
comment
Это означает, что регистр в именах файлов не имеет значения (по крайней мере, для этих PDF-файлов ...). Кажется, что все решения, кроме пользовательского распаковщика, ненадежны. - person alxx; 12.07.2012
comment
Только что протестировано, имена файлов в верхнем регистре extracting: abc.txt extracting: Abc.txt extracting: def.txt - person Anirudh Ramanathan; 12.07.2012
comment
Я не уверен в алфавитном порядке, который вы только что упомянули. Это потому, что я добавил 10 файлов с именами (1.txt, 2.txt, 3.txt, 4.txt, 5.txt, 6.txt, 7.txt, 8.txt, 9.txt, 10.txt) в том же порядке. Результат был случайным. После того, как он сгенерировал 10.txt секунд. - person Nishant; 12.07.2012
comment
Первый раз случайно. Второй раз и последующие разы последовали. - person Nishant; 12.07.2012
comment
Следовал ли он порядку, в котором вы заархивировали файлы, или это было совершенно случайно? Попробуйте добавить несколько каталогов вместе с файлами. Всегда ли каталоги извлекаются после файлов? Если это ненадежно, лучшим вариантом может быть распаковка во временное место. - person Anirudh Ramanathan; 12.07.2012

Хотя вы не можете установить порядок извлечения с помощью метода ExtractAll, вы можете получить список файлов в архиве с помощью Entries и использовать ExtractSelectedEntries для их обработки в нужном вам порядке.
Обновление:

Нет, я не контролирую сервер и механизм распаковки.

Значит, дело не в использовании DotNetZip?.. Хорошо, план Б: отправить метаданные в другом архиве. Но может возникнуть проблема с отсутствием синхронизации их распаковки.

person alxx    schedule 12.07.2012
comment
OP не использует DotNetZip для распаковки файлов. Он хочет указать порядок распаковки при архивировании. - person Anirudh Ramanathan; 12.07.2012