AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 11.12.2014, 08:57   #1  
vad21 ist offline
vad21
Участник
 
5 / 10 (1) +
Registriert seit: 24.09.2012
Ort: Домодедово
Разархивирование zip архива встроенным в windows архиватором
Всем, привет!

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

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

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

А Вам это нужно чтобы на локальные машины не устанавливать архиватор, а в какой-то вашей процедуре вам нужно воспользоваться распаковкой? Дак поместите допустим winRAR.exe на расшареный сетевой ресурс и вызывайте экзешник оттуда передавая ему локальный путь?
Alt 16.12.2014, 09:36   #3  
LeonDerCom ist offline
LeonDerCom
Участник
 
45 / 20 (1) +++
Registriert seit: 08.10.2012
vad21
Копайте в сторону библиотек, например, 7-zip.dll.
Alt 16.12.2014, 09:58   #4  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
В .NET 4.5 (которую требует Ax2012) архиватор в коробке.
This post has been rated by: mallard (2), Kabardian (1).
Alt 16.12.2014, 12:29   #5  
DSPIC ist offline
DSPIC
Боец
 
1.077 / 1243 (44) ++++++++
Registriert seit: 11.04.2008
Zitat:
Zitat von belugin Beitrag anzeigen
В .NET 4.5 (которую требует Ax2012) архиватор в коробке.
Внутри AX namespace System.IO.Compression урезаный, и замечательные классы ZipFile\ZipArchive недоступны из X++
Alt 16.12.2014, 12:50   #6  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Zitat:
Zitat von DSPIC Beitrag anzeigen
Внутри AX namespace System.IO.Compression урезаный, и замечательные классы ZipFile\ZipArchive недоступны из X++
Может, надо reference какой добавить?
Alt 25.12.2014, 12:11   #7  
Xamers ist offline
Xamers
Участник
 
1 / 15 (1) ++
Registriert seit: 21.06.2011
В .Net есть сборка System.IO.Packaging.ZipPackage которая становится доступна после подключения в ax референса WindowsBase. Правда разархивировать с ее помощью не приходилось. Пример архивации на основе сборки есть в Ax2012 SysTaskRecorderPackageZip.
This post has been rated by: mallard (2), Kabardian (3).
Alt 20.02.2016, 10:45   #8  
ice321i ist offline
ice321i
Участник
 
63 / 54 (2) ++++
Registriert seit: 22.10.2007
Zitat:
Zitat von Xamers Beitrag anzeigen
В .Net есть сборка System.IO.Packaging.ZipPackage которая становится доступна после подключения в ax референса WindowsBase. Правда разархивировать с ее помощью не приходилось. Пример архивации на основе сборки есть в Ax2012 SysTaskRecorderPackageZip.
Подниму-ка тему, может кому и пригодится. Система DAX2012.
Столкнулся с хотелкой пользователей.
"Аксапта должна сама распаковывать zip файл-ы!"

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

X++:
System.IO.Compression.ZipFile::ExtractToDirectory(sourceArhiveFileName, destinationDirectoryName);
This post has been rated by: mazzy (2).
Alt 22.02.2016, 11:57   #9  
Damn ist offline
Damn
Участник
 
436 / 154 (6) ++++++
Registriert seit: 28.05.2003
Ort: в глуши
Zitat:
Zitat von ice321i Beitrag anzeigen
Для того что бы замечательные классы ZipFile и его СТАТИЧЕСКИЕ методы стали доступны необходимо добавить Reference - "System.IO.Compression.FileSystem" и вуаля:
X++:
System.IO.Compression.ZipFile::ExtractToDirectory(sourceArhiveFileName, destinationDirectoryName);
Открыл Ax2012R3 CU10, а там этот референс уже есть в репозитарии, слой syp. В каком-то хотфиксе видимо появился.
__________________
Дмитрий
Alt 23.02.2016, 10:03   #10  
Damn ist offline
Damn
Участник
 
436 / 154 (6) ++++++
Registriert seit: 28.05.2003
Ort: в глуши
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 сохраняет любые имена файлов в первозданном виде.
__________________
Дмитрий
Alt 26.02.2016, 06:55   #11  
Damn ist offline
Damn
Участник
 
436 / 154 (6) ++++++
Registriert seit: 28.05.2003
Ort: в глуши
И ещё один минус. System.IO.Compression.ZipFile::ExtractToDirectory при разархивировании не перезаписывает уже находящиеся в указанной папке файлы, а выдаёт соответствующую ошибку. То есть этой функции всегда нужно передавать заведомо пустую папку. Неудобно, с 7-Zip такой проблемы нет.
__________________
Дмитрий
Alt 04.03.2016, 13:53   #12  
Perc ist offline
Perc
Участник
 
194 / 57 (2) ++++
Registriert seit: 05.03.2005
Zitat:
Zitat von Damn Beitrag anzeigen
Открыл Ax2012R3 CU10, а там этот референс уже есть в репозитарии, слой syp. В каком-то хотфиксе видимо появился.
А научите как можно воспользоваться этой функцией в DAX4. Что сделать чтобы добавить в референс? У меня нет в списке по пункту добавить ссылку.
Alt 04.03.2016, 15:54   #13  
Damn ist offline
Damn
Участник
 
436 / 154 (6) ++++++
Registriert seit: 28.05.2003
Ort: в глуши
Этот референс в Ax2009 недоступен. Подозреваю, что в Ax4 его тоже ещё не было. Нет у меня Ax4, не могу посмотреть.
__________________
Дмитрий
Alt 09.03.2016, 05:54   #14  
Perc ist offline
Perc
Участник
 
194 / 57 (2) ++++
Registriert seit: 05.03.2005
Zitat:
Zitat von Damn Beitrag anzeigen
Этот референс в Ax2009 недоступен. Подозреваю, что в Ax4 его тоже ещё не было. Нет у меня Ax4, не могу посмотреть.
Так вот вопрос почему не доступен и как сделать доступным? Я видел народ вообще свои какие-то самодельные вещи подключает. А тут то вроде MS..
Alt 09.03.2016, 08:03   #15  
Damn ist offline
Damn
Участник
 
436 / 154 (6) ++++++
Registriert seit: 28.05.2003
Ort: в глуши
7-Zip чем не устраивает ? Если в Ax4.0 референс System.IO.Compression.ZipFile иначе как самодельно не получается прикрутить, то уж лучше самодельно 7-Zip прикрутить, он удобнее в использовании.
__________________
Дмитрий
Alt 09.03.2016, 17:39   #16  
Kabardian ist offline
Kabardian
Талантливый разгвоздяй
Benutzerbild von Kabardian
 
424 / 338 (12) ++++++
Registriert seit: 14.12.2008
Ort: Москва
Blog-Einträge: 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++ :
    Zitat:
    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.
This post has been rated by: mallard (2).
Alt 08.04.2016, 08:44   #17  
Perc ist offline
Perc
Участник
 
194 / 57 (2) ++++
Registriert seit: 05.03.2005
Zitat:
Zitat von Kabardian Beitrag anzeigen
В AX 4.0 / 2009 / 2012 есть возможность использовать .NET сборки, таким образом использовать классы/методы из стандартных сборок.NET, либо сборок разработанных самостоятельно/сторонними разработчиками...[/LIST]
За тест в акс2012 спасибо конечно. Но только в том то и вопрос был - как сделать в акс4. В акс2012 я знаю что работает. По-моему там даже где-то есть пример архивации и референс уже на sys слое прикручен.
А вот когда я пытаюсь в акс4 по кнопке обзор добавить ссылку появляется предупреждение.
Name:  Снимок.JPG
Hits: 4925
Größe:  24,0 KB
а потом и:
Name:  Снимок2.JPG
Hits: 5004
Größe:  22,5 KB

Перемещения файла по разным каталогам у меня эффекта не дали. Вот поэтому и спрашиваю - возможно ли пользоваться библиотекой в акс4 и как.
Alt 08.04.2016, 08:59   #18  
Perc ist offline
Perc
Участник
 
194 / 57 (2) ++++
Registriert seit: 05.03.2005
Zitat:
Zitat von Damn Beitrag anzeigen
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();
Stichworte
zip, архив

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 07:16 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.