Вопрос

В моем приложении пользователь выбирает большой файл (> 100 МБ) на своем диске. Я хотел бы, чтобы программа взяла выбранный файл и Нарезать его на архивные части это 100 МБ или меньше. Как это может быть сделано? какая библиотеки и файл формат я должен использовать? Не могли бы вы дать мне образец кода? После того, как первая архивная часть 100 МБ создана, я собираюсь загрузить ее на сервер, а затем загрузите следующую часть 100 МБ, и так далее, пока загрузка не будет завершена. После этого, с другого компьютера, я скачаю все эти заархивированные части, а затем я хочу Подключить их к исходному файлу. Анкет Например, возможно ли это с библиотеками 7ZIP? Спасибо!

ОБНОВИТЬ: Из первого ответа, я думаю, я собираюсь использовать Sevenzipsharp, и я верю, что теперь я понимаю, как разделить файл на архивные части 100 МБ, но у меня все еще есть два вопроса:

  1. Можно ли создать первую архивную часть 100 МБ и загрузить ее перед созданием следующей части 100 МБ?
  2. Как извлечь файл с Sevenzipsharp из нескольких разделенных архивов?

Обновление № 2: Я просто играл с 7-zip-графическим интерфейсом и создавал множественные архивы-объемы/разделения, и я обнаружил, что выбор первого и извлечение из него извлечет весь файл из всех разделенных архивов. Это заставляет меня верить, что пути к последующим частям включены в первую (или это последовательно?). Тем не менее, я не уверен, будет ли это работать прямо из консоли, но я попробую это сейчас и посмотрю, решает ли он вопрос № 2 из первого обновления.

Это было полезно?

Решение

Взгляни на Sevenzipsharp, вы можете использовать это для создания своих файлов Spit 7Z, сделайте все, что хотите загрузить их, затем извлечь их на стороне сервера.

Чтобы разделить архив взглянуть на SevenZipCompressor.CustomParameters Член, проходя в «V100M». (Вы можете найти больше параметров в файле 7-zip.chm от 7ZIP)

Другие советы

Сначала вы можете разделить данные на 100 МБ «пакеты», а затем передать каждый пакет в компрессор, притворяясь, что это просто отдельные файлы.

Однако этот вид сжатия обычно основан на потоке. Пока библиотека, которую вы используете, будет выполнять свой ввод/вывод через класс, полученный из потока, было бы довольно просто внедрить свой собственный поток, который «упаковывает» данные, которые вам нравятся на лету, - так как данные передаются в Ваш метод write () вы записываете его в файл. Когда вы превышаете 100 МБ в этом файле, вы просто закрываете этот файл и открываете новый и продолжаете писать.

Любой из этих подходов позволит вам легко загрузить один «пакет», продолжая сжимать следующий.

редактировать

Просто чтобы быть ясным - декомпрессия - это только обратная последовательность вышеперечисленного, поэтому, как только вы получите работу сжатия, декомпрессия будет легкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top