Как сохранить PDF-файл в zip-файле, не сохраняя его локально

У меня есть zip-файл внутри zip-файла, а внутри внутреннего zip-файла у меня есть документ Excel и PDF / Tif.

В настоящее время я разрабатываю инструмент, который читает все эти файлы и сохраняет их в базе данных. Раньше я сначала сохранял оба файла в папке, но поскольку в zip-файлах содержится множество файлов, я получил исключение из-за отсутствия места на диске.

Итак, теперь я хочу попытаться сохранить файлы в базе данных напрямую, не зная расположение папки.

// Path.Combine(exportPathNoZip,entry.FullName) --> \unzip\Files1\Files1.ZIP
using (ZipArchive archive = ZipFile.OpenRead(Path.Combine(exportPathNoZip,entry.FullName)))
{
    // These are the files inside the zip file and contain the Excel and the image
    foreach (ZipArchiveEntry item in archive.Entries)
    {
        // Save image to database
        if (item.FullName.EndsWith(".tif", StringComparison.OrdinalIgnoreCase) ||
            item.FullName.EndsWith(".tiff", StringComparison.OrdinalIgnoreCase) ||
            item.FullName.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
        {
            byte[] file = File.ReadAllBytes(?????);
            _formerRepository.InsertFormerFileAsBinary(file);
        }
    }
}

Но это не сработает, потому что File.ReadAllBytes() потребуется путь. Так что я могу сделать? Хранение файлов локально даст мне исключение из-за нехватки места на диске, и без него у меня нет пути.

Имейте в виду, что я хотел бы использовать библиотеку System.IO.Compression только для этого.


person Jordec    schedule 17.11.2016    source источник
comment
Возможный дубликат stackoverflow.com/questions/17232414/   -  person Stefano Balzarotti    schedule 17.11.2016
comment
В его сообщении они создают zip-файл, но я хочу извлечь файлы внутри zip. Возможно, MemoryStream может иметь какое-то отношение к этому, но я все же хотел бы знать, как это сделать.   -  person Jordec    schedule 17.11.2016
comment
Проверьте это: stackoverflow.com/questions/20520238/   -  person Stefano Balzarotti    schedule 17.11.2016


Ответы (1)


Учитывая, что

_formerRepository.InsertFormerFileAsBinary

принимает byte [], тогда это должно работать:

 using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) {
        item.Open().CopyTo(ms);
        _formerRepository.InsertFormerFileAsBinary(ms.ToArray());
 }

И для справки: Создание массива байтов из потока

person parvee    schedule 17.11.2016