Czy jest jakoś możliwe utworzenie ZipArchive z pliku (ów) w pamięci (a nie na dysku).Jak stworzyć ZipArchive z plików w pamięci w C#?
Po to przypadek użycia: Wiele plików są odbierane w zmiennej IEnumerable<HttpPostedFileBase>
. Chcę spakować wszystkie te pliki razem, używając ZipArchive
. Problem polega na tym, że ZipArchive
zezwala tylko na CreateEntryFromFile
, która oczekuje ścieżki do pliku, gdzie mam tylko pliki w pamięci.
Pytanie: Czy istnieje sposób, aby użyć „strumień”, aby utworzyć „wejście” w ZipArchive
, tak, że można bezpośrednio umieścić w treści pliku w zip?
Nie chcę najpierw zapisywać plików, tworzyć zip (ze ścieżek zapisanych plików), a następnie usuwać pojedyncze pliki.
Tutaj attachmentFiles
jest IEnumerable<HttpPostedFileBase>
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var attachment in attachmentFiles)
{
zipArchive.CreateEntryFromFile(Path.GetFullPath(attachment.FileName), Path.GetFileName(attachment.FileName),
CompressionLevel.Fastest);
}
}
...
}
Czy próbowałeś to http://stackoverflow.com/questions/12347775/ziparchive- tworzy-invalid-zip-file/12350106 # 12350106? –
Dlaczego nie utworzyć pliku tymczasowego, a następnie zwolnić po zakończeniu archiwum? – RussDunn
Chcę uniknąć tworzenia pliku tymczasowego i usunąć go, jeśli to możliwe. To właśnie napisałem w pytaniu, ale jeśli nie ma innego sposobu, będę musiał to zrobić. – Flair