C#
Рабта с файлами в архиве C#
У меня есть заархивированный файл txt с паролем, я его считываю без распаковки и записываю данные с него в массив типа список list построчно, в этот массив я периодически добавляю строки. Использую ZipEntry. Теперь задача как список с новыми добавленными элементами снова записывать в архивированный файл без его распаковки.Буду рад дельным советам.Спасибо!
Для добавления новых данных в архивированный файл без его распаковки в 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);
}
}
```
Этот код сначала считывает данные из архива, добавляет новые строки в список, а затем перезаписывает архив с обновленными данными.
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);
}
}
```
Этот код сначала считывает данные из архива, добавляет новые строки в список, а затем перезаписывает архив с обновленными данными.
в реальности всё равно будет распаковка и запаковка, просто скрыта на этапе разрушения программы. (можно будет перехватить распакованный файл, но об этом никто не знает)
Ну хз кароче
Похожие вопросы
- C# - Чтение их Excel файла
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#
- Python, C, C++, C#, Что выбрать-то?
- Помогите разобраться с заданием! C#
- Стоит ли изучать c# в 13 лет?