bullock
@bullock

Как внести изменения в файле Open XML который находится в памяти и сохранить изменения не используя диск?

Задача эталонный файл xlsx загрузить в память, внести в него изменения и сохранить изменения в памяти(не на диске).
FileInfo f = new FileInfo("File.xlsx");
// Создаем массив байт для хранения фала в памяти
// +50000 на случай если изменения будут больше чем исходный файл, это можно так делать или я гоню?
byte[] newFile = new byte[f.Length+50000];
// Переносим файл с диска на память
File.WriteAllBytes("File.xlsx", newFile);
// Создаем поток из байтового массива что бы можно было использовать его в SpreadsheetDocument.Open
streamNewFile = new MemoryStream(newFile, true);
// Пытаемся открыть xlsx находящийся в памяти
SpreadsheetDocument document = SpreadsheetDocument.Open(streamNewFile, true); // ошибка происходит тут
// что то делаем с таблицей
// закрываем таблицу
 document.Close();
// возвращаем массив байтов с сохраненной таблицей
return streamNewFile.ToArray();

Может я использую не тот подход? Посоветуйте что делать?

59ef39efaca3d644928218.png
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 2
yarosroman
@yarosroman Куратор тега C#
C# the best
Скорее всего, из за того что вы под буфер выделяете больше памяти, файл не может распаковаться(ведь это зип архивы), исключение явно указывает на это, выделяйте под буфер точно под размер файла. при сохранении потом создайте новый буфер или скорее всего вам вернется новый буфер.
Ответ написан
Комментировать
bullock
@bullock Автор вопроса
Проблему решил:
var ms = new MemoryStream();

var originalStream = File.Open(...));

originalStream.CopyTo(ms);

var document =  SpreadsheetDocument.Open(ms, true);

document.Close();

var blob = ms.ToArray();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы