C#

Рабта с файлами в архиве C#

У меня есть заархивированный файл txt с паролем, я его считываю без распаковки и записываю данные с него в массив типа список list построчно, в этот массив я периодически добавляю строки. Использую ZipEntry. Теперь задача как список с новыми добавленными элементами снова записывать в архивированный файл без его распаковки.Буду рад дельным советам.Спасибо!
TB
Timur Beibutbekov
518
Для добавления новых данных в архивированный файл без его распаковки в C#, вы можете использовать библиотеку ` System.IO .Compression`, которая встроена в .NET Framework. Вот пример того, как это можно сделать:

1. Откройте существующий архив и считайте его содержимое в список:

```csharp
using System;
using System.Collections.Generic;
using System.IO ;
using System.IO .Compression;
using System.Text;

class Program
{
static void Main()
{
string archivePath = "your-archive.zip";
string password = "your-password";

// Считываем данные из архива
List<string> lines = ReadArchiveFile(archivePath, password);

// Добавляем новые данные в список
lines.Add("Новая строка 1");
lines.Add("Новая строка 2");

// Записываем обновленный список обратно в архив
UpdateArchiveFile(archivePath, password, lines);
}

static List<string> ReadArchiveFile(string archivePath, string password)
{
List<string> lines = new List<string>();

using (ZipArchive archive = ZipFile.OpenRead(archivePath))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
using (Stream stream = entry.Open ())
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
lines.Add(line);
}
}
}
}

return lines;
}

static void UpdateArchiveFile(string archivePath, string password, List<string> lines)
{
// Создаем временный файл для записи обновленных данных
string tempFilePath = "temp.txt";
File.WriteAllLines(tempFilePath, lines);

// Создаем новый архив с обновленными данными
using (FileStream archiveStream = new FileStream(archivePath, FileMode.Create))
using (ZipArchive archive = new ZipArchive(archiveStream, ZipArchiveMode.Create))
{
ZipArchiveEntry entry = archive.CreateEntry("data.txt");
using (Stream entryStream = entry.Open ())
using (FileStream tempFileStream = new FileStream(tempFilePath, FileMode.Open ))
{
tempFileStream.CopyTo(entryStream);
}
}

// Удалите временный файл, если он больше не нужен
File.Delete(tempFilePath);
}
}
```

Этот код сначала считывает данные из архива, добавляет новые строки в список, а затем перезаписывает архив с обновленными данными.
Бекболат Ермагамбетов
Бекболат Ермагамбетов
3 552
Лучший ответ
в реальности всё равно будет распаковка и запаковка, просто скрыта на этапе разрушения программы. (можно будет перехватить распакованный файл, но об этом никто не знает)
Бауыржан Аяшев
Бауыржан Аяшев
27 426
Ну хз кароче