Проблема при открытии копии потока MemoryStream

179
28 октября 2017, 14:04

Есть код который создает из файла поток. Файл содержит шаблонный вариант отчета в формате Open Xml. Затем код делает из этого потока копию, что бы потом можно было эту копию повторно использовать. Это сделано для того что бы не обращаться повторно к диску. Но при обращении к копии stream происходит ошибка при создании объекта SpreadsheetDocument.

Вот сама ошибка: DocumentFormat.OpenXml.Packaging.OpenXmlPackageException: The specified package is invalid. The main part is missing.

if (copyStreamIsExist == false)
{
    Log.SetDetal("Первичное открытие файла шаблона");
    var originalStream = File.Open(path + templateName, FileMode.Open);
    originalStream.CopyTo(workMemoryStream);
    copyStream = new MemoryStream();
    workMemoryStream.CopyTo(copyStream);
    copyStreamIsExist = true;
    var document = SpreadsheetDocument.Open(workMemoryStream, true);
} else {
    Log.SetDetal("Файл шаблона существует в памяти. Делаем копию памяти");
    workMemoryStream = new MemoryStream();
    copyStream.CopyTo(workMemoryStream);
    workMemoryStream.Seek(0, SeekOrigin.Begin);
    var document = SpreadsheetDocument.Open(workMemoryStream, true);
}
Answer 1

Вы не перемотали copyStream в начало. После копирования в него текущее его положение — в конце, так что когда вы копируете из него, начальное положение для копирования совпадает с концом потока.

Добавьте copyStream.Seek(0, SeekOrigin.Begin); перед каждым копированием из него. (Если добавить только после копирования в copyStream, то первое копирование из copyStream сработает, а второе — нет.)

READ ALSO
Zoom как в фотошопе на canvas

Zoom как в фотошопе на canvas

Создаю графический редактор с помощью canvas b fabricjs на javaScript

246
Как использовать метод arrey.find js

Как использовать метод arrey.find js

исходя из значения time будет запускать таймер и по истечении оного - выводить алертКак это можно реализовать?

357
Как сгруппировать `div` по 4 штуки?

Как сгруппировать `div` по 4 штуки?

Изначально есть такая структура:

390
Экземпляры Vue.js?

Экземпляры Vue.js?

Сколько экземпляров можно создать?

272