Для извлечения файлов из определенной папки внутри .zip архива и сохранения их на диск в отдельную папку с помощью C# можно воспользоваться библиотекой SharpZipLib. Ниже приведен пример кода, который выполняет данную операцию:
```csharp
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip;
class Program
{
static void Main()
{
string zipFilePath = "path/to/your/archive.zip";
string targetFolderPath = "path/to/your/target/folder";
using (ZipFile zipFile = new ZipFile(zipFilePath))
{
foreach (ZipEntry entry in zipFile)
{
if (entry.Name.StartsWith("specificFolder/") && !entry.IsDirectory)
{
string entryFileName = Path.GetFileName(entry.Name);
string entryFilePath = Path.Combine(targetFolderPath, entryFileName);
using (Stream inputStream = zipFile.GetInputStream(entry))
using (FileStream outputStream = File.Create(entryFilePath))
{
StreamUtils.Copy(inputStream, outputStream, new byte[4096]);
}
}
}
}
}
}
```
Данный код открывает .zip архив по указанному пути, итерируется по всем файлам в архиве, и если файл находится в определенной папке ("specificFolder/" в данном случае), то извлекает его и сохраняет в указанную папку на диске.
Чтобы распаковать содержимое первой папки из архива в папку на диске, можно модифицировать код следующим образом:
```csharp
static void Main()
{
string zipFilePath = "path/to/your/archive.zip";
string targetFolderPath = "path/to/your/target/folder";
using (ZipFile zipFile = new ZipFile(zipFilePath))
{
foreach (ZipEntry entry in zipFile)
{
if (entry.IsDirectory && entry.Name.Split('/').Length == 2)
{
string entryFolderPath = Path.Combine(targetFolderPath, entry.Name);
Directory.CreateDirectory(entryFolderPath);
}
else if (!entry.IsDirectory && entry.Name.Split('/').Length == 2)
{
string entryFileName = Path.GetFileName(entry.Name);
string entryFilePath = Path.Combine(targetFolderPath, entryFileName);
using (Stream inputStream = zipFile.GetInputStream(entry))
using (FileStream outputStream = File.Create(entryFilePath))
{
StreamUtils.Copy(inputStream, outputStream, new byte[4096]);
}
}
}
}
}
```
Этот код будет создавать новую папку на диске для первой папки в архиве и извлекать все файлы из нее в эту папку.
Обратите внимание, что для использования библиотеки SharpZipLib необходимо установить ее с помощью NuGet: `Install-Package SharpZipLib`.