Извлечение содержимого C# из ZIP в .NET
Используйте Aspose.ZIP for .NET, чтобы открыть ZIP-архив, проверить его записи и восстановить только C#-файлы, необходимые C#-приложению. На этой странице извлечение означает поиск элементов с расширением .cs внутри ZIP-контейнера и запись в контролируемое место назначения. Aspose.ZIP восстанавливает файл из архива, но не интерпретирует и не конвертирует его внутреннее содержимое.
Выборочное извлечение полезно для приема документов, обработки загрузок, пакетов отчетов и рабочих процессов управления контентом. Приложение может пропускать нерелевантные записи, проверять имена и размеры и передавать утвержденные файлы на следующий этап без распаковки всего пакета.
Как извлечь C#-файлы из ZIP с помощью C#
Установите
пакет Aspose.ZIP for .NET
и подключите пространство имен Aspose.Zip. Метаданные архива доступны до записи, поэтому приложение может проверить ArchiveEntry.Name, ArchiveEntry.IsDirectory и ArchiveEntry.UncompressedSize перед сохранением документные файлы.
Package Manager Console Command
PM> Install-Package Aspose.Zip
После установки откройте ZIP через Archive, переберите Archive.Entries, выберите записи не-каталоги с расширением .cs и вызовите ArchiveEntry.Extract для каждого утвержденного назначения. Пример использует только конечное имя файла, поэтому пути из архива не могут записывать вне целевой папки.
Шаги извлечения файлов C# в C#
- Определите путь исходного ZIP и создайте изолированный выходной каталог.
- Откройте пакет классом
Archive. - Переберите
Archive.Entriesвместо немедленной распаковки всего пакета. - Пропустите каталоги и выберите имена файлов с расширением
.cs. - Создайте путь назначения, который остается внутри утвержденного выходного корня.
- Отклоните записи, превышающие заданный лимит размера после распаковки.
- Сохраните каждую утвержденную запись через
ArchiveEntry.Extract.
Системные требования
- Поддерживаемая среда выполнения .NET в Windows, Linux или macOS.
- Visual Studio, JetBrains Rider, Visual Studio Code или другая среда разработки C#.
- Aspose.ZIP for .NET, установленный через NuGet или подключенный как сборка.
- Доступ на чтение к исходному ZIP и доступ на запись к каталогу назначения.
- Четкие лимиты размера, времени выполнения и временного хранилища для недоверенных архивов.
Пример C#: извлечение выбранных файлов C# из ZIP
Код открывает ZIP-пакет, пропускает каталоги, фильтрует записи по разрешенному расширению и записывает совпадающие файлы в один выходной каталог. Отбрасывание путей из архива не позволяет сегментам родительских каталогов управлять местом назначения. В production-коде также задайте детерминированное правило для дубликатов имен.
Извлечение файлов C# из ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-c#");
string[] allowedExtensions = { ".cs" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
foreach (ArchiveEntry entry in archive.Entries)
{
if (entry.IsDirectory) continue;
string fileName = Path.GetFileName(entry.Name);
if (string.IsNullOrWhiteSpace(fileName)) continue;
string extension = Path.GetExtension(fileName);
if (!Array.Exists(
allowedExtensions,
value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
{
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"Запись '{fileName}' превышает лимит извлечения 100 MB.");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
Заметки по реализации для файлов C#
Фильтрация по расширению только определяет файлы-кандидаты; она не доказывает, что содержимое корректно или безопасно. Если файл будет отображаться, индексироваться или конвертироваться, проверьте структуру, кодировку, соответствие формату и содержимое документным компонентом.
Пример намеренно уплощает пути из архива. Если две утвержденные записи имеют одинаковое конечное имя файла, ArchiveEntry.Extract может перезаписать существующий файл. Определите политику до извлечения: отклонять дубликаты, создавать уникальные имена или сохранять проверенную относительную структуру папок.
Безопасность и конфиденциальность
Загруженный ZIP, имена записей и содержимое рассматривайте как недоверенный ввод. Не объединяйте ArchiveEntry.Name напрямую с выходным каталогом: запись может содержать абсолютный путь или сегменты перехода к родительским каталогам. Пример использует Path.GetFileName; если нужно сохранить папки, разрешите итоговый путь и убедитесь, что он остается внутри утвержденного корня.
Ограничивайте сжатый размер, размер после распаковки для записи и всего архива, число записей, время обработки и параллельные задачи. Используйте временное хранилище с ограниченными правами, удаляйте частичные результаты после ошибки и не записывайте в логи пароли, приватные имена файлов или извлеченное содержимое.
FAQ по извлечению файлов C#
Как извлечь только файлы C# из ZIP-архива в C#?
Откройте ZIP классом Archive, переберите Archive.Entries, отфильтруйте записи не-каталоги по расширению .cs и вызовите Extract для каждого проверенного выходного пути.
Проверяет ли Aspose.ZIP внутреннее содержимое файла C#?
Нет. Aspose.ZIP восстанавливает файл, сохраненный в архиве. Чтение, проверка или конвертация содержимого относятся к компоненту, который поддерживает этот формат.
Можно ли использовать тот же шаблон выбора для 7Z, RAR или TAR?
Идея та же, но каждый контейнер нужно открывать соответствующим архивным классом Aspose.ZIP. Типы записей и операции извлечения могут различаться.
Как обрабатывать повторяющиеся имена файлов C#?
Определите правило до извлечения: отклонять дубликаты, создавать уникальные имена или сохранять проверенную относительную структуру папок.
Связанные руководства по извлечению документов
Откройте страницы C# для документов и издательских форматов, которые часто хранятся в архивах.