Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
.NET 4.x

Подскажите библиотеку по (7z|un7z) без необходимости установки архиватор на ПК

30.01.2023, 18:56. Показов 1567. Ответов 17

Студворк — интернет-сервис помощи студентам
Добрый вечер!

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

Перебрал кучу, или платные, или требуют установки архиватора 7-zip, или только распаковщик, без упаковщика.

Посоветуйте библиотеки на подобие Aspose.Zip.dll (но бесплатную).

Сейчас обрабатываю обычным архиватором C# ZipFile и ZipArchive из System.IO.Compression, но там только .zip.
Для примера у меня папка 15Mb упаковуется в zip = 5Mb, а если паковать в 7z = 1.6Mb.

И подскажите кто в теме, как пользоваться официальным пакетом из nuget `7-Zip.CommandLine`?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2023, 18:56
Ответы с готовыми решениями:

ЯП без необходимости отдельной платформы
Учу C#. Недурно, очень недурно, но привязка к платформе .NET раздражает. Компилю под 4.5 версию. Отправляю знакомому. Ему лень ...

Подскажите архиватор под dos
Не завалялся ли у кого какой нибудь архиватор под dos чтоб на дискету влез или подскажите где скачать можно. Очень желательно чтоб был на...

Архиватор 7Zip - подскажите местонахождение временных файлов
Случилась такая ситуация, на основном разделе из 20 гигов осталось 300 с хвостиком метров. Юзал 7Zip, открывал им архив, находящийся в...

17
Эксперт .NET
 Аватар для Rius
13153 / 7711 / 1679
Регистрация: 25.05.2015
Сообщений: 23,498
Записей в блоге: 14
30.01.2023, 19:15
Почему с собой исполняемый файл 7z не таскать?

Добавлено через 1 минуту
А, nuget пакет - оно и есть...

Добавлено через 14 секунд
Работа с 7zip из командной строки.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3421 / 2740 / 575
Регистрация: 04.09.2018
Сообщений: 8,608
Записей в блоге: 3
30.01.2023, 19:15
Цитата Сообщение от Rius Посмотреть сообщение
исполняемый файл 7z
Зачем исполняемый? Там библа его есть, вот dll и возить с собой..
2
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
30.01.2023, 19:35  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
А, nuget пакет - оно и есть...
Так а пользоваться ним как?
При установке `7-Zip.CommandLine` ничего не добавляется в проект.


Цитата Сообщение от wizard41 Посмотреть сообщение
Там библа его есть, вот dll и возить с собой..
Нашёл такое, пробую `SevenZipSharp`, но ругается на 7z.dll.
Скачал с оф сайта 7-zip, установил себе, взял оттуда 7z.dll, но всё равно падает с ошибкой
SevenZip.SevenZipLibraryException: 'Can not load 7-zip library or internal COM error! Message: failed to load library from "\bin\Debug\7z.dll".'

Подозреваю что не тот 7z.dll, где взять тот? На оф сайте не нахожу. Ну вернее нахожу много чего, но не то что нужно )
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3421 / 2740 / 575
Регистрация: 04.09.2018
Сообщений: 8,608
Записей в блоге: 3
30.01.2023, 19:41
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Подозреваю что не тот 7z.dll
Скорее всего именно так. У меня был проект, где файлы отчетов паковались в 7z, вот библу я брал с его сайта, все работало как надо. Там даже более-менее сносная инструкция была по методам 7z библиотеки. По факту, там нужны только 2 метода, они там просто перегружены для различных ситуаций и аргументов..
1
Эксперт .NET
 Аватар для Rius
13153 / 7711 / 1679
Регистрация: 25.05.2015
Сообщений: 23,498
Записей в блоге: 14
30.01.2023, 19:54
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Так а пользоваться ним как?
При установке `7-Zip.CommandLine` ничего не добавляется в проект.
Да, действительно...
Возможно, это из тех nuget пакетов, что используются при сборке проекта, а не предназначены для поставки с приложением.
Таскайте с собой явно, значит.
Если dll, то обе версии, x86 и x64, а уже в рантайме выбирайте, какая нужна.
1
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
30.01.2023, 20:03  [ТС]
Спасибо всем, запустил.
Теперь сделать, чтобы выбиралась правильная разрядность, и всё.
0
Эксперт .NET
 Аватар для Rius
13153 / 7711 / 1679
Регистрация: 25.05.2015
Сообщений: 23,498
Записей в блоге: 14
30.01.2023, 20:08
В подкаталог x86 копируете версию x86 библиотеки. В x64 соответственно.
В классе с DllImport пишете:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
 
namespace MyApp
{
    internal static class Wrapper
    {
        static Wrapper()
        {
            var myPath = new Uri(typeof(Wrapper).Assembly.CodeBase).LocalPath;
            var myFolder = Path.GetDirectoryName(myPath);
 
            var is64 = IntPtr.Size == 8;
            var subfolder = is64 ? "x64" : "x86";
 
            LoadLibrary(Path.Combine(myFolder, subfolder, "library.dll"));
        }
 
        [DllImport("kernel32.dll")]
        private static extern IntPtr LoadLibrary(string path);
 
        [DllImport("library.dll", SetLastError = true, CharSet = CharSet.Ansi, EntryPoint = "MethodFromDll", CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr MethodFromDll();
    }
}
1
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
30.01.2023, 20:51  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
В подкаталог x86 копируете версию x86 библиотеки. В x64 соответственно.
В классе с DllImport пишете:
Не пойму как оно должно работать.
Как его вызывать нужно?

Пытался запустить как здесь, дошёл до вот такого вида, но всё равно не работает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
internal static class Wrapper
{
    static Wrapper()
    {
        var myPath = new Uri(typeof(Wrapper).Assembly.CodeBase).LocalPath;
        var myFolder = Path.GetDirectoryName(myPath);
 
        var is64 = IntPtr.Size == 8;
        var subfolder = is64 ? "x64" : "x86";
 
        LoadLibrary(Path.Combine(myFolder, subfolder, "7z.dll"));
    }
 
    [DllImport("7z.dll")]
    private static extern IntPtr LoadLibrary(string path);
 
    [DllImport("7z.dll", SetLastError = true, CharSet = CharSet.Ansi, EntryPoint = "MethodFromDll", CallingConvention = CallingConvention.Cdecl)]
    public static extern IntPtr MethodFromDll();
}
Вот так примитивно работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
var currentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 
if (Marshal.SizeOf(typeof(IntPtr)) == 8)
{
    Console.WriteLine("64 bit");
    SevenZipCompressor.SetLibraryPath(Path.Combine(currentDir, "x64", "7z.dll"));
}
else
{
    Console.WriteLine("32 bit");
    SevenZipCompressor.SetLibraryPath(Path.Combine(currentDir, "x86", "7z.dll"));
}
0
Эксперт .NET
 Аватар для Rius
13153 / 7711 / 1679
Регистрация: 25.05.2015
Сообщений: 23,498
Записей в блоге: 14
30.01.2023, 20:55
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
[DllImport("7z.dll")]
    private static extern IntPtr LoadLibrary(string path);
Нафига? У меня там что написано?)

Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Вот так примитивно работает
То, что выше, для ручного использования dll, а не через прослойки.
А ниже это аналог от авторов SevenZipCompressor.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3421 / 2740 / 575
Регистрация: 04.09.2018
Сообщений: 8,608
Записей в блоге: 3
30.01.2023, 21:05
BeginnerCoderCS,
LZMA - эффективно.
INTF1 - опционально.
Вложения
Тип файла: 7z lzma2201.7z (1.20 Мб, 19 просмотров)
Тип файла: zip 7zIntf15.zip (8.5 Кб, 13 просмотров)
1
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
30.01.2023, 23:50  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Нафига? У меня там что написано?)
Сначала было так как написано, потом начал менять, доменялся до того что выложил, запустить так и не смог.

Вернул как у вас, как запускать?

Цитата Сообщение от wizard41 Посмотреть сообщение
lzma2201.7z
Качал это из оф сайта, там исходники, скомпилировать у меня не получилось.
Взял dll из установленной программы.
0
Эксперт .NET
 Аватар для Rius
13153 / 7711 / 1679
Регистрация: 25.05.2015
Сообщений: 23,498
Записей в блоге: 14
31.01.2023, 05:22
LoadLibrary импортируется из кернела. Это виндовая функция.

Потом надо правильно импортировать функцию из библиотеки 7z.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
31.01.2023, 12:17
Популярные либы для работы с архивами:
https://www.nuget.org/packages/SharpZipLib
https://www.nuget.org/packages/DotNetZip
https://www.nuget.org/packages/SharpCompress

Одна из них вроде даже 7zip умеет читать (но не писать).
1
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
31.01.2023, 12:30  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Одна из них вроде даже 7zip умеет читать (но не писать).
SharpCompress может читать, но нужно и писать.
Там ещё есть библиотеки, которые только unpack.

А вообще есть преимущество этих библиотек над встроенной в System.IO.Compression?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3421 / 2740 / 575
Регистрация: 04.09.2018
Сообщений: 8,608
Записей в блоге: 3
31.01.2023, 13:20
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
А вообще есть преимущество этих библиотек над встроенной в System.IO.Compression?
Говорят что есть, но увидеть это, наверное, можно только на достаточно больших размерах файлов.
Если же паковать/распаковывать необходимо небольшие файлы, то особой разницы можно не заметить. Ну и алгоритмы сжатия естественно разнятся.
1
9 / 6 / 3
Регистрация: 10.01.2020
Сообщений: 330
31.01.2023, 13:40  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Говорят что есть, но увидеть это, наверное, можно только на достаточно больших размерах файлов.
Если же паковать/распаковывать необходимо небольшие файлы, то особой разницы можно не заметить. Ну и алгоритмы сжатия естественно разнятся.
Вообще планируется от 5Mb до 500Mb, но в среднем 40-200Mb.
Это большие?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3421 / 2740 / 575
Регистрация: 04.09.2018
Сообщений: 8,608
Записей в блоге: 3
31.01.2023, 13:42
Цитата Сообщение от BeginnerCoderCS Посмотреть сообщение
Это большие?
Хмм... Кому как. Я б не сказал что большие.. Но и не маленькие )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2023, 13:42
Помогаю со студенческими работами здесь

Как извлечь значение из функции без необходимости ее переписывать
Вопрос, как массив VV сделать доступным в этом же классе?Сделать доступным в другом пакете? Если нельзя, подскажите как надо переделать...

Как расширить сетевой принтер без необходимости драйверов ?
Нашёл этот способ ссылка Но к сожалению RedMon — Redirection Port Monitor не поддерживает windows 10. Еще какие решения есть...

Инет на ноуте без необходимости включения инета на компьютере
Здравствуйте! Есть компьютер и интернет на нем от дом.ру. Есть ноутбук и нужен и на нем интернет чтобы можно было бы сидеть за эту же плату...

Как сделать авторизацию без необходимости перегружать страницу?
Есть код авторизации <?php if(isset($_POST) && isset($_POST)) { require_once $_SERVER . "/configs/db.php"; $login =...

Подскажите библиотеку.наверно библиотеку
VS2012 не хочет считать числа например 654367^534, 54266^34 вообщем любые большие числа я так понял даже long double не справляется с этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru