Собрать архив в памяти
Всем привет. Возник вопрос по сборке ini файла и архива. Сейчас у меня собирается ini файл конфигурации, ложится в папку с программой и пакуется в архив на серверной машине. Серверная машина на винде.
Возник вопрос. Как можно работать с файлами не сохраняя их на диск ? Планируется установка на серверную машину с линуксом. Хочется избавиться от привязки к папкам.
Сейчас сборка архива выглидит вот так
var folderDir = "C:/arh";
var resultPath = @".\result.zip";
var ini = new IniFile("C:/arh/test.ini");
ini.Write("accountId", "1", "Settings");
...
ZipFile.CreateFromDirectory(folderDir, resultPath, CompressionLevel.Optimal, true);
//return File(System.IO.File.ReadAllBytes(resultPath), "application/zip", "file.zip");
using (MemoryStream stream = new MemoryStream())
{
var bytes = System.IO.File.ReadAllBytes(resultPath);
FileContentResult result = File(bytes, "application/zip", "file.zip");
System.IO.File.Delete(resultPath);
return result;
}
Вернее как... На линуксе будет где-то только лежать папка с файлами для сборки. Но собрать ini и архив, который после будет передан на фронт нужно в памяти. Вопрос... как ?
Ответы (1 шт):
Автор решения: Leksor
→ Ссылка
Псевдокод для примера:
using (var archiveMemoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(archiveMemoryStream, ZipArchiveMode.Create, true))
{
var zipItem = archive.CreateEntry(fileName);
using (var originalFileMemoryStream = new MemoryStream(fileBytes))
{
using (var entryStream = zipItem.Open())
{
originalFileMemoryStream.CopyTo(entryStream);
}
}
}
return ($"{archiveName}{FileExtensionConstants.Zip}", archiveMemoryStream.ToArray());
}