07.02.2011, 17:42 | #1 |
Участник
|
Zip-архивирование средствами Windows 2008
Тут была статья daxdilip: Dynamics AX 2009 Integration with PowerShell to unzip files как разархивировать zip-файл с помощью стандартных средств операционной системы.
А вот как сделать обратное ? Создать zip-архив. Совсем не хочется использовать сторонние программы для архивирования.
__________________
Дмитрий |
|
07.02.2011, 18:03 | #2 |
Administrator
|
Посмотрите тут: http://blogs.msdn.com/b/daiken/archi...ar-gadget.aspx
Создание архива PHP код:
PHP код:
PHP код:
PHP код:
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 07.02.2011 в 18:11. |
|
07.02.2011, 18:26 | #3 |
Administrator
|
Кстати, хочу отметить, что в Windows еще до 2008 был архиватор %SystemRoot%\System32\Iexpress.exe.
Вот его описание: http://clubrus.kulichki.com/iexindex.htm И его параметры командной строки:
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Damn (2). |
08.02.2011, 13:42 | #4 |
Участник
|
Первый способ архивирования понять не смог
А вот с %SystemRoot%\System32\Iexpress.exe разобрался. Создаёт cab-архивы. Проверял на Windows XP, 2003 и 2008. Работает одинаково. Но есть недостатки. Имя результирующего файла архива можно указывать только в формате 8.3. То есть надо где-то брать временное 8-символьное имя для файла, а после создания архива его переименовывать. Путь к файлу SED в параметрах командной строки нужно указывать в так называемом укороченном виде (с символами ~). То есть либо изначально пытаться сохранять этот файл в месте с уже "коротким" путём, либо каждый раз преобразовывать путь к файлу к короткому виду. На стороне клиента можно использовать метод WinAPI::getShortPathName(), а вот на стороне сервера даже не знаю что использовать. Разобраться бы с первым способом, может у него нет таких недостатков.
__________________
Дмитрий |
|
|
За это сообщение автора поблагодарили: sukhanchik (2). |
08.02.2011, 13:57 | #5 |
Administrator
|
Цитата:
В приведенных мною примерах - производится упаковка / распаковка и прочие действия на языке Powershell (т.е. есть пример кода, которые могут заставить Powershell заняться архивированием). Этот код нужно оформить в файл *.ps1 и вызвать Powershell точно также (но с другим файлом *.ps1) как указано в примере по приведенной Вами ссылке. И все. Конечно я привел не совсем готовый пример. Но в любом случае - при более детальном изучении языка Powershell (коим я не владею) - думаю - что Вы сможете достичь своей цели.
__________________
Возможно сделать все. Вопрос времени |
|
08.02.2011, 14:05 | #6 |
Administrator
|
А на стороне сервера нельзя эту же функцию использовать? (понимаю, что ее нет в классе WinAPIServer, но ее ж можно и создать)
__________________
Возможно сделать все. Вопрос времени |
|
08.02.2011, 16:41 | #7 |
Участник
|
Цитата:
Погуглил в интернете по слову GetShortPathName и нашёл что не только у меня такая ошибка возникает, решения пока не нашёл.
__________________
Дмитрий |
|
08.02.2011, 16:49 | #8 |
----------------
|
а никто не пробовал через .Net с архивами работать?
|
|
08.02.2011, 16:57 | #9 |
Участник
|
Мы для этих целей использовали 7zip. Создали таблицу параметров, где указаны команды для командной строки и просто запускали процесс (new System.Diagnostics.ProcessStartInfo(...).Start() ), передавая ему параметры командной строкой
Теоретически можно использовать .NET (CLR Interoperability) для этих целей. Класс GZipStream тут пример можно посмотреть.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
За это сообщение автора поблагодарили: Wamr (1). |
09.02.2011, 01:11 | #10 |
HAI; CAN HAS STDIO?
|
Как разархивировать zip архив?
нет никаких проблем с использованием внешнего архиватора, смотри мой пост (один из последних). а методы из WinAPI в WinAPIServer можно аккуратно переписывать самому (микрософт поленился).
__________________
our sharp bitter vitriol is not that of the vulgar. |
|
09.02.2011, 08:42 | #11 |
Участник
|
Цитата:
Цитата:
|
|
|
За это сообщение автора поблагодарили: Damn (2), plumbum (1). |
10.02.2011, 02:02 | #12 |
HAI; CAN HAS STDIO?
|
я же и говорю, поленился. а как вы думаете, как я переписывал методы в WinAPIServer, не через .NET Framework? потому и говорю, что "аккуратно"
__________________
our sharp bitter vitriol is not that of the vulgar. |
|
10.02.2011, 09:19 | #13 |
Участник
|
Расскажите, пожалуйста, как вы переписали на .NET Framework реализацию kernel32.GetShortPathName без использования P/Invoke?
|
|
11.02.2011, 00:44 | #14 |
HAI; CAN HAS STDIO?
|
переписывал только те, что нужны были: shellExecute() и waitForSingleObject() потому что он используется в shellExecute(), но в конечном счёте реализовал ShellExecute() через System.Diagnostics.Process:
X++: System.Diagnostics.Process testProcess;
;
new InteropPermission(InteropKind::ClrInterop).assert();
testProcess = System.Diagnostics.Process::Start(path, parameters);
testProcess.WaitForExit();
CodeAccessPermission::revertAssert(); UPD: всё-таки посмотрел быстро, я бы стал копать в сторону System.IO.Path. Long story short: нужно найти аналог функции в CLR, а он сам разберётся, какая библиотека ему нужна в момент выполнения, 32 или 64
__________________
our sharp bitter vitriol is not that of the vulgar. Последний раз редактировалось offenmeier; 11.02.2011 в 01:05. |
|
11.02.2011, 04:57 | #15 |
HAI; CAN HAS STDIO?
|
UPD 2: похоже, .NET Framework не поддерживает работу с 8.3 именами файлов как с пережитком прошлого так что не самый удачный пример.
мне нужен был shellExecute() на сервере, я его написал нужен будет shortPath, я луше свою реализацию напишу, раз в CLR его нет, благо правила описаны http://support.microsoft.com/kb/142982
__________________
our sharp bitter vitriol is not that of the vulgar. |
|
26.11.2013, 17:18 | #16 |
Участник
|
Кто-нибудь разобрался как использовать GZipStream для распаковки zip-архива ?
Везде примеры только для распаковки архива, состоящего из одного файла. А если их там несколько.
__________________
Дмитрий |
|
26.11.2013, 19:58 | #17 |
Участник
|
Цитата:
Сообщение от Damn
Кто-нибудь разобрался как использовать GZipStream для распаковки zip-архива ?
Везде примеры только для распаковки архива, состоящего из одного файла. А если их там несколько. Только в .Net 4.5 появились нужные классы, например System.IO.Compression.ZipFile. Самому требовалась еще возможность работать с запароленными архивами, вышел из положения установив сборку открытого проекта DotNetZip. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
Теги |
zip, архивирование |
|
|