ZipReader
Чтение записей ZIP в память без автоматического извлечения на диск.
Создайте собственный ZipReader, проверьте Open, затем GetFiles/FileExists/ReadFile и явный Close. Это RefCounted, не Resource; Dispose после использования. Open заменяет ранее открытый архив, закрывая его до новой попытки: при ошибке не рассчитывайте сохранить старый сеанс.
GetFiles возвращает плоский список реальных записей, включая каталоги с завершающим / и повторяющиеся имена. Виртуальные родительские каталоги не достраиваются. ReadFile читает всю распакованную запись в byte[], а не поток; пустой результат бывает и у пустого файла, и при диагностируемой ошибке. Сам метод не создаёт файлов на диске.
ReadFile использует Unicode-поиск пути движка, а FileExists/GetCompressionLevel — поиск minizip: при caseSensitive=false совпадение Unicode-регистра может различаться. Используйте точные имена из GetFiles. Повторяющиеся имена не означают версии: ReadFile выбирает первое совпадение. GetCompressionLevel выводит категорию из флагов ZIP, не исходный уровень упаковщика.
Windows headless-проверка и независимое чтение Python проверили наши небольшие архивы. Чтение повреждённых/огромных/ZIP64 архивов, извлечение на диск, лимиты памяти и межплатформенность не подтверждены. Имена из чужого архива не являются готовыми безопасными путями назначения для собственного извлечения.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
ZipReaderКонструктор
public ZipReader();Создаёт собственный закрытый читатель без открытого файла. После успешного Open используйте операции записей; Close проверяйте явно, затем Dispose объект.
Методы6
CloseError
public Error Close();Закрывает успешно открытый архив. Проверяйте Error.Ok; повторный Close закрытого объекта вызывает диагностику, это не идемпотентная операция. Не освобождает сам RefCounted-объект.
ErrorError.Ok при успехе; иначе ошибка текущего этапа, не гарантия неизменности файла.
FileExistsbool
public bool FileExists(string path, bool caseSensitive = true);Проверяет нахождение и открытие записи, не целостность её содержимого. По умолчанию учитывает регистр; каталог требует реального имени с завершающим /. caseSensitive=false использует поиск minizip и для Unicode может расходиться с ReadFile.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
caseSensitive | bool | true |
pathТочное имя записи внутри ZIP, обычно относительное с /; это не локальный путь назначения или источник данных.
caseSensitivetrue учитывает регистр по умолчанию. false у ReadFile и FileExists/GetCompressionLevel использует разные реализации Unicode-поиска; предпочитайте точные имена из GetFiles.
booltrue, если запись найдена и открывается; это не проверка CRC.
GetCompressionLevelint
public int GetCompressionLevel(string path, bool caseSensitive = true);Возвращает категорию уровня из флагов заголовка minizip: обычно 1, 2, 6 или 9; при отсутствии/неудаче -1. Это не точный уровень исходного упаковщика: наша запись с уровнем 0 или 3 возвращает 6. caseSensitive=false использует тот же путь поиска, что FileExists, не ReadFile.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
caseSensitive | bool | true |
pathТочное имя записи внутри ZIP, обычно относительное с /; это не локальный путь назначения или источник данных.
caseSensitivetrue учитывает регистр по умолчанию. false у ReadFile и FileExists/GetCompressionLevel использует разные реализации Unicode-поиска; предпочитайте точные имена из GetFiles.
intКатегория из флагов ZIP, не точный исходный уровень; -1 при отсутствии/неудаче.
GetFilesstring[]
public string[] GetFiles();Возвращает новый string[] всех реальных имён записей в порядке обхода архива, включая каталоги с / и дубликаты. Не рекурсивно извлекает файлы и не достраивает отсутствующие родительские записи. Изменение массива не меняет архив.
string[]Новый массив реальных имён записей, включая каталоги и дубликаты.
OpenError
public Error Open(string path);Открывает файл ZIP через FileAccess для чтения. Если архив уже открыт, сначала закрывает его; новая ошибка не сохраняет прежний архив. Возвращает Error.Ok/Failed, не проверяет CRC всех записей при открытии.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть файла архива для FileAccess; для записи нужен доступный каталог и право записи. Это не имя записи внутри ZIP.
ErrorError.Ok при успехе; иначе ошибка текущего этапа, не гарантия неизменности файла.
ReadFilebyte[]
public byte[] ReadFile(string path, bool caseSensitive = true);Читает всю распакованную запись в независимый byte[]. Проверяет ошибки чтения и CRC при завершении; при ошибке возвращает пустой массив с диагностикой. Пустая запись тоже даёт пустой массив. Выделяет память по заявленному размеру; код проверяет границу INT_MAX, но большие/ZIP64 архивы этим обзором не приняты. Не извлекает на диск. При дубликатах выбирает первое имя.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
caseSensitive | bool | true |
pathТочное имя записи внутри ZIP, обычно относительное с /; это не локальный путь назначения или источник данных.
caseSensitivetrue учитывает регистр по умолчанию. false у ReadFile и FileExists/GetCompressionLevel использует разные реализации Unicode-поиска; предпочитайте точные имена из GetFiles.
byte[]Новый массив распакованных байтов; пустой для пустой записи или диагностируемой ошибки.