Работа с zip-архивами


Всё таки в Microsoft были неправы, сделав интернальными столько полезных классов в .Net Framework.
Вот например, работа с *.zip файлами. Класс есть, но он интернальный, а возможность работать дана тока с пакэйджами (package - это такие zip-архивы, которые содержат Content_Types.xml, например документы 2007-го офиса). И вот зачем спрашивается надо было закрывать? Пришлось воспользоваться рефлекшеном для работы:
Assembly asm = Assembly.GetAssembly(typeof (ZipPackage));
Type ZipArchiveType = asm.GetType("MS.Internal.IO.Zip.ZipArchive");
Type ZipFileInfoType = asm.GetType("MS.Internal.IO.Zip.ZipFileInfo");
MethodInfo openOnStreamMethod = ZipArchiveType.GetMethod("OpenOnStream", BindingFlags.Static | BindingFlags.NonPublic);
object archive = openOnStreamMethod.Invoke(null, new object[] {stream, FileMode.Open, FileAccess.Read, false});
MethodInfo getFileMethod = ZipArchiveType.GetMethod("GetFile", BindingFlags.NonPublic | BindingFlags.Instance);
object contentFile = getFileMethod.Invoke(archive, new object[] {"content.xml"});
MethodInfo getStreamMethod = ZipFileInfoType.GetMethod("GetStream", BindingFlags.NonPublic | BindingFlags.Instance);
using (Stream contentStream = (Stream)getStreamMethod.Invoke(contentFile, new object[] { FileMode.Open, FileAccess.Read }))
{
// Здесь можно без проблем использовать распакованные данные
}

Метки: c#dotnetzip

КОММЕНТАРИИ


Umatkot
Umatkot 01.12.2013 7:44:58 #1
Ну ты и зверь! Дай бог тебе здоровья, хороший человек! Ты так помог)))))
Umatkot
Umatkot 01.12.2013 7:46:17 #2
Дай бог тебе здоровья! Ты так помог))) Уже думал не доберусь до этих свойств в документе!) Спасибо)

НОВЫЙ КОММЕНТАРИЙ


*жирный*
_курсив_
+подчеркнутый+
! заголовок 1
!! заголовок 2
* список
** список 2
# нумерованый список
## нумерованый список 2
[url:http://www.example.com]
{"без форматирования"}
Полное описание синтаксиса