11.12.2014, 08:57 | #1 |
Участник
|
Разархивирование zip архива встроенным в windows архиватором
Всем, привет!
Возможно ли разархивировать zip-архив стандартным встроенным в windows архиватором, не имея архиваторов типа winzip, winrar, итд Если через: WinApi::shellExecute('C:\\Downloads\\10122014.zip', "", 'C:\\Downloads\\', '', 1, true); архив открывается на просмотр вложенных в него файлов, но вот как извлечь не понятно. |
|
12.12.2014, 08:42 | #2 |
Участник
|
Вообще: cmd | expand /? (Программа распаковки файлов Microsoft)
А Вам это нужно чтобы на локальные машины не устанавливать архиватор, а в какой-то вашей процедуре вам нужно воспользоваться распаковкой? Дак поместите допустим winRAR.exe на расшареный сетевой ресурс и вызывайте экзешник оттуда передавая ему локальный путь? |
|
16.12.2014, 09:36 | #3 |
Участник
|
vad21
Копайте в сторону библиотек, например, 7-zip.dll. |
|
16.12.2014, 09:58 | #4 |
Участник
|
В .NET 4.5 (которую требует Ax2012) архиватор в коробке.
|
|
|
За это сообщение автора поблагодарили: mallard (2), Kabardian (1). |
16.12.2014, 12:29 | #5 |
Боец
|
Цитата:
Сообщение от belugin
В .NET 4.5 (которую требует Ax2012) архиватор в коробке.
|
|
16.12.2014, 12:50 | #6 |
Участник
|
|
|
25.12.2014, 12:11 | #7 |
Участник
|
В .Net есть сборка System.IO.Packaging.ZipPackage которая становится доступна после подключения в ax референса WindowsBase. Правда разархивировать с ее помощью не приходилось. Пример архивации на основе сборки есть в Ax2012 SysTaskRecorderPackageZip.
|
|
|
За это сообщение автора поблагодарили: mallard (2), Kabardian (3). |
20.02.2016, 10:45 | #8 |
Участник
|
Цитата:
Столкнулся с хотелкой пользователей. "Аксапта должна сама распаковывать zip файл-ы!" Бинго!!!! Для того что бы замечательные классы ZipFile и его СТАТИЧЕСКИЕ методы стали доступны необходимо добавить Reference - "System.IO.Compression.FileSystem" и вуаля: X++: System.IO.Compression.ZipFile::ExtractToDirectory(sourceArhiveFileName, destinationDirectoryName); |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
22.02.2016, 11:57 | #9 |
Участник
|
Открыл Ax2012R3 CU10, а там этот референс уже есть в репозитарии, слой syp. В каком-то хотфиксе видимо появился.
__________________
Дмитрий |
|
23.02.2016, 10:03 | #10 |
Участник
|
Ax2012 R3.
Стал тестировать распаковку zip-архива с помощью System.IO.Compression.ZipFile::ExtractToDirectory . Столкнулся с тем что если запакованные файлы содержат кириллицу в названии, то после распаковки эта кириллица превращается в непонятные символы. Тестировал на русифицированной Windows 8.1. В функции System.IO.Compression.ZipFile::ExtractToDirectory есть третий входящий параметр Encoding. Но и он не помог. Передать в качестве параметра получилось только класс System.Text.UTF8Encoding, на остальные варианты ругается "Указанная кодировка имен записей не поддерживается". И параметр System.Text.UTF8Encoding на кириллицу никак не повлиял. Распаковка с помощью 7-Zip сохраняет любые имена файлов в первозданном виде.
__________________
Дмитрий |
|
26.02.2016, 06:55 | #11 |
Участник
|
И ещё один минус. System.IO.Compression.ZipFile::ExtractToDirectory при разархивировании не перезаписывает уже находящиеся в указанной папке файлы, а выдаёт соответствующую ошибку. То есть этой функции всегда нужно передавать заведомо пустую папку. Неудобно, с 7-Zip такой проблемы нет.
__________________
Дмитрий |
|
04.03.2016, 13:53 | #12 |
Участник
|
|
|
04.03.2016, 15:54 | #13 |
Участник
|
Этот референс в Ax2009 недоступен. Подозреваю, что в Ax4 его тоже ещё не было. Нет у меня Ax4, не могу посмотреть.
__________________
Дмитрий |
|
09.03.2016, 05:54 | #14 |
Участник
|
|
|
09.03.2016, 08:03 | #15 |
Участник
|
7-Zip чем не устраивает ? Если в Ax4.0 референс System.IO.Compression.ZipFile иначе как самодельно не получается прикрутить, то уж лучше самодельно 7-Zip прикрутить, он удобнее в использовании.
__________________
Дмитрий |
|
09.03.2016, 17:39 | #16 |
Талантливый разгвоздяй
|
В AX 4.0 / 2009 / 2012 есть возможность использовать .NET сборки, таким образом использовать классы/методы из стандартных сборок.NET, либо сборок разработанных самостоятельно/сторонними разработчиками.
Для добавления референса для сборки в AX нужно: а) открыть АОТ б) правый клик на узле References / Добавить ссылку, в открывшемся диалоге выбрать сборку .NET. Если сборка отсутствует, то нужно по кнопку Обзор в диалоге добавления сборки открыть диалог добавления сборки, найти нужный DLL и добавить его. Конкретно по вашему примеру с классом System.IO.Compression.ZipFile AX 4.0 под рукой нет, но на AX 2012 слету взлетело:
|
|
|
За это сообщение автора поблагодарили: mallard (2). |
08.04.2016, 08:44 | #17 |
Участник
|
Цитата:
А вот когда я пытаюсь в акс4 по кнопке обзор добавить ссылку появляется предупреждение. а потом и: Перемещения файла по разным каталогам у меня эффекта не дали. Вот поэтому и спрашиваю - возможно ли пользоваться библиотекой в акс4 и как. |
|
08.04.2016, 08:59 | #18 |
Участник
|
Цитата:
Единственно проблема была получить ответ чем завершилась работа 7зип. Пробовал: X++: WinAPI::shellExecute(.. X++: wsh = new COM('WScript.Shell'); ret = wsh.Run(.. X++: processZIP = System.Diagnostics.Process::Start(.. processZIP.WaitForExit(); ret = processZIP.get_ExitCode(); |
|
Теги |
zip, архив |
|
|