Я уверен, что это не дубликат, поэтому потерпите меня на минуту.
Как я могу программно (C #) ZIP файл (в Windows) без использования сторонних библиотек? Мне нужен родной вызов Windows или что-то в этом роде; Мне действительно не нравится идея начать процесс, но я буду любить, если мне будет абсолютно необходимо. А на Пиновке звонок будет намного лучше.
Если это не удастся, позвольте мне рассказать вам, чего я на самом деле пытаюсь достичь: мне нужна возможность позволить пользователю загружать коллекцию документов за один запрос. Есть идеи, как этого добиться?
c#
compression
zip
download
Эстебан Арайя
источник
источник
Ответы:
Вы используете .NET 3.5? Вы можете использовать
ZipPackage
класс и связанные с ним классы. Это больше, чем просто архивирование списка файлов, потому что ему нужен тип MIME для каждого добавляемого вами файла. Это может делать то, что вы хотите.В настоящее время я использую эти классы для аналогичной проблемы, чтобы заархивировать несколько связанных файлов в один файл для загрузки. Мы используем расширение файла, чтобы связать загружаемый файл с нашим настольным приложением. Одна небольшая проблема, с которой мы столкнулись, заключалась в том, что для создания zip-файлов просто невозможно использовать сторонний инструмент, такой как 7-zip, поскольку клиентский код не может его открыть - ZipPackage добавляет скрытый файл, описывающий тип содержимого каждый файл компонента и не может открыть ZIP-файл, если файл этого типа содержимого отсутствует.
источник
При использовании 4.5+ Framework теперь есть классы ZipArchive и ZipFile .
Вам необходимо добавить ссылки на:
Для .NET Core с таргетингом на net46 необходимо добавить зависимости для
Пример project.json:
Для .NET Core 2.0 достаточно просто добавить простую инструкцию использования:
источник
Я был в той же ситуации, желая .NET вместо сторонней библиотеки. Как уже упоминалось выше, просто использовать класс ZipPackage (представленный в .NET 3.5) недостаточно. Для работы ZipPackage существует дополнительный файл, который ДОЛЖЕН быть включен в архив. Если этот файл добавлен, то полученный ZIP-пакет можно открыть непосредственно из Windows Explorer - без проблем.
Все, что вам нужно сделать, это добавить файл [Content_Types] .xml в корень архива с узлом «По умолчанию» для каждого расширения файла, которое вы хотите включить. После добавления я мог просматривать пакет из Windows Explorer или программно распаковывать и читать его содержимое.
Дополнительную информацию о файле [Content_Types] .xml можно найти здесь: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Вот пример файла [Content_Types] .xml (должен иметь точное имя):
И C # для создания ZIP-файла:
Примечание:
источник
источник
Исходя из ответа Саймона Маккензи на этот вопрос , я бы предложил использовать пару методов, таких как этот:
источник
Похоже, что Windows может просто позволить вам сделать это ...
К сожалению, я не думаю, что вы начнете отдельный процесс, если не перейдете к стороннему компоненту.
источник
Добавьте эти 4 функции в ваш проект:
И используйте их так:
источник