AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2014, 08:57   #1  
vad21 is offline
vad21
Участник
 
5 / 10 (1) +
Регистрация: 24.09.2012
Адрес: Домодедово
Разархивирование zip архива встроенным в windows архиватором
Всем, привет!

Возможно ли разархивировать zip-архив стандартным встроенным в windows архиватором, не имея архиваторов типа winzip, winrar, итд

Если через:
WinApi::shellExecute('C:\\Downloads\\10122014.zip', "", 'C:\\Downloads\\', '', 1, true);

архив открывается на просмотр вложенных в него файлов, но вот как извлечь не понятно.
Старый 12.12.2014, 08:42   #2  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
305 / 137 (5) +++++
Регистрация: 21.04.2008
Вообще: cmd | expand /? (Программа распаковки файлов Microsoft)

А Вам это нужно чтобы на локальные машины не устанавливать архиватор, а в какой-то вашей процедуре вам нужно воспользоваться распаковкой? Дак поместите допустим winRAR.exe на расшареный сетевой ресурс и вызывайте экзешник оттуда передавая ему локальный путь?
Старый 16.12.2014, 09:36   #3  
LeonDerCom is offline
LeonDerCom
Участник
 
45 / 20 (1) +++
Регистрация: 08.10.2012
vad21
Копайте в сторону библиотек, например, 7-zip.dll.
Старый 16.12.2014, 09:58   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В .NET 4.5 (которую требует Ax2012) архиватор в коробке.
За это сообщение автора поблагодарили: mallard (2), Kabardian (1).
Старый 16.12.2014, 12:29   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от belugin Посмотреть сообщение
В .NET 4.5 (которую требует Ax2012) архиватор в коробке.
Внутри AX namespace System.IO.Compression урезаный, и замечательные классы ZipFile\ZipArchive недоступны из X++
Старый 16.12.2014, 12:50   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Внутри AX namespace System.IO.Compression урезаный, и замечательные классы ZipFile\ZipArchive недоступны из X++
Может, надо reference какой добавить?
Старый 25.12.2014, 12:11   #7  
Xamers is offline
Xamers
Участник
 
1 / 15 (1) ++
Регистрация: 21.06.2011
В .Net есть сборка System.IO.Packaging.ZipPackage которая становится доступна после подключения в ax референса WindowsBase. Правда разархивировать с ее помощью не приходилось. Пример архивации на основе сборки есть в Ax2012 SysTaskRecorderPackageZip.
За это сообщение автора поблагодарили: mallard (2), Kabardian (3).
Старый 20.02.2016, 10:45   #8  
ice321i is offline
ice321i
Участник
 
60 / 47 (2) +++
Регистрация: 22.10.2007
Цитата:
Сообщение от Xamers Посмотреть сообщение
В .Net есть сборка System.IO.Packaging.ZipPackage которая становится доступна после подключения в ax референса WindowsBase. Правда разархивировать с ее помощью не приходилось. Пример архивации на основе сборки есть в Ax2012 SysTaskRecorderPackageZip.
Подниму-ка тему, может кому и пригодится. Система DAX2012.
Столкнулся с хотелкой пользователей.
"Аксапта должна сама распаковывать zip файл-ы!"

Цитата:
Сообщение от belugin Посмотреть сообщение
Может, надо reference какой добавить?
Бинго!!!!
Для того что бы замечательные классы ZipFile и его СТАТИЧЕСКИЕ методы стали доступны необходимо добавить Reference - "System.IO.Compression.FileSystem" и вуаля:

X++:
System.IO.Compression.ZipFile::ExtractToDirectory(sourceArhiveFileName, destinationDirectoryName);
За это сообщение автора поблагодарили: mazzy (2).
Старый 22.02.2016, 11:57   #9  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от ice321i Посмотреть сообщение
Для того что бы замечательные классы ZipFile и его СТАТИЧЕСКИЕ методы стали доступны необходимо добавить Reference - "System.IO.Compression.FileSystem" и вуаля:
X++:
System.IO.Compression.ZipFile::ExtractToDirectory(sourceArhiveFileName, destinationDirectoryName);
Открыл Ax2012R3 CU10, а там этот референс уже есть в репозитарии, слой syp. В каком-то хотфиксе видимо появился.
__________________
Дмитрий
Старый 23.02.2016, 10:03   #10  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
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  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
И ещё один минус. System.IO.Compression.ZipFile::ExtractToDirectory при разархивировании не перезаписывает уже находящиеся в указанной папке файлы, а выдаёт соответствующую ошибку. То есть этой функции всегда нужно передавать заведомо пустую папку. Неудобно, с 7-Zip такой проблемы нет.
__________________
Дмитрий
Старый 04.03.2016, 13:53   #12  
Perc is offline
Perc
Участник
 
193 / 47 (2) +++
Регистрация: 05.03.2005
Цитата:
Сообщение от Damn Посмотреть сообщение
Открыл Ax2012R3 CU10, а там этот референс уже есть в репозитарии, слой syp. В каком-то хотфиксе видимо появился.
А научите как можно воспользоваться этой функцией в DAX4. Что сделать чтобы добавить в референс? У меня нет в списке по пункту добавить ссылку.
Старый 04.03.2016, 15:54   #13  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Этот референс в Ax2009 недоступен. Подозреваю, что в Ax4 его тоже ещё не было. Нет у меня Ax4, не могу посмотреть.
__________________
Дмитрий
Старый 09.03.2016, 05:54   #14  
Perc is offline
Perc
Участник
 
193 / 47 (2) +++
Регистрация: 05.03.2005
Цитата:
Сообщение от Damn Посмотреть сообщение
Этот референс в Ax2009 недоступен. Подозреваю, что в Ax4 его тоже ещё не было. Нет у меня Ax4, не могу посмотреть.
Так вот вопрос почему не доступен и как сделать доступным? Я видел народ вообще свои какие-то самодельные вещи подключает. А тут то вроде MS..
Старый 09.03.2016, 08:03   #15  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
7-Zip чем не устраивает ? Если в Ax4.0 референс System.IO.Compression.ZipFile иначе как самодельно не получается прикрутить, то уж лучше самодельно 7-Zip прикрутить, он удобнее в использовании.
__________________
Дмитрий
Старый 09.03.2016, 17:39   #16  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
В AX 4.0 / 2009 / 2012 есть возможность использовать .NET сборки, таким образом использовать классы/методы из стандартных сборок.NET, либо сборок разработанных самостоятельно/сторонними разработчиками.

Для добавления референса для сборки в AX нужно: а) открыть АОТ б) правый клик на узле References / Добавить ссылку, в открывшемся диалоге выбрать сборку .NET. Если сборка отсутствует, то нужно по кнопку Обзор в диалоге добавления сборки открыть диалог добавления сборки, найти нужный DLL и добавить его.

Конкретно по вашему примеру с классом System.IO.Compression.ZipFile AX 4.0 под рукой нет, но на AX 2012 слету взлетело:
  • Загуглил статью на msdn со справкой по данному классу: https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx
  • Добавил ссылку на сборку c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.FileSystem.dll
  • Подготовил файлы для примера - в папке c:\temp создал 2 директории: start, extract и в папку start перенес несколько файлов
  • Написал джоб. Переписал пример использования класса ZipFile с msdn на X++ :
    Цитата:
    static void NetZipFileDemo(Args _args)
    {
    System.String startPath = @"c:\temp\start";
    System.String zipPath = @"c:\temp\result.zip";
    System.String extractPath = @"c:\temp\extract";
    ;

    System.IO.Compression.ZipFile::CreateFromDirectory(startPath, zipPath);

    System.IO.Compression.ZipFile::ExtractToDirectory(zipPath, extractPath);
    }
  • Запустил джоб и проверил результат: 1) был создан архив c:\temp\result.zip, 2) содержимое этого архива распаковано в папку c:\temp\extract.
За это сообщение автора поблагодарили: mallard (2).
Старый 08.04.2016, 08:44   #17  
Perc is offline
Perc
Участник
 
193 / 47 (2) +++
Регистрация: 05.03.2005
Цитата:
Сообщение от Kabardian Посмотреть сообщение
В AX 4.0 / 2009 / 2012 есть возможность использовать .NET сборки, таким образом использовать классы/методы из стандартных сборок.NET, либо сборок разработанных самостоятельно/сторонними разработчиками...[/LIST]
За тест в акс2012 спасибо конечно. Но только в том то и вопрос был - как сделать в акс4. В акс2012 я знаю что работает. По-моему там даже где-то есть пример архивации и референс уже на sys слое прикручен.
А вот когда я пытаюсь в акс4 по кнопке обзор добавить ссылку появляется предупреждение.
Название: Снимок.JPG
Просмотров: 2383

Размер: 24.0 Кб
а потом и:
Название: Снимок2.JPG
Просмотров: 2540

Размер: 22.5 Кб

Перемещения файла по разным каталогам у меня эффекта не дали. Вот поэтому и спрашиваю - возможно ли пользоваться библиотекой в акс4 и как.
Старый 08.04.2016, 08:59   #18  
Perc is offline
Perc
Участник
 
193 / 47 (2) +++
Регистрация: 05.03.2005
Цитата:
Сообщение от Damn Посмотреть сообщение
7-Zip чем не устраивает ? Если в Ax4.0 референс System.IO.Compression.ZipFile иначе как самодельно не получается прикрутить, то уж лучше самодельно 7-Zip прикрутить, он удобнее в использовании.
Ну в итоге пришлось воспользоваться 7зип. Не устраивает он только тем что его надо устанавливать на терминалы или аосы. А у нас их куча и за все с админом раскланиваться. Насчет 7-зип удобнее - возможно. Но сравнить не с чем - System.IO.Compression.ZipFile мне воспользоваться не удалось.
Единственно проблема была получить ответ чем завершилась работа 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, архив

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Zip-архивирование средствами Windows 2008 Damn DAX: Программирование 16 26.11.2013 19:58
AIF: Microsoft Dynamics AX Services and Windows Azure Service Bus Blog bot DAX Blogs 0 24.07.2013 03:13
MSDAX 4.0 и планировщик win server 2008 werov2010 DAX: Администрирование 11 16.08.2012 14:18
emeadaxsupport: Group policy setting "System Objects: Default owner for objects created by members of the administrators group" is missing on Windows Server 2008 Blog bot DAX Blogs 2 28.08.2009 02:14

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:51.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.