Gestern bestanden hatte ich ein seltsames Problem: Wenn ich eine ZIP-Datei als byte[]
und lesen Sie es passieren wollte, ich eine bekam Ionic.Zip.ZipExpception
Memory nicht lesbar, wenn sie als Parameter
kann nicht lesen, dass als ZipFile
public string Import(byte[] file)
{
try
{
var stream = new MemoryStream(file);
if (ZipFile.IsZipFile(stream))
{
ImportArchive(stream);
} else {
...
}
...
}
private void ImportArchive(MemoryStream stream)
{
var zip = ZipFile.Read(stream); //--> ZipException thrown
...
}
Nun, wenn ich die byte[]
als Parameter und nicht die MemoryStream
passieren, funktioniert alles einwandfrei:
public string Import(byte[] file)
{
try
{
if (ZipFile.IsZipFile(new MemoryStream(file), true))
{
ImportArchive(file);
} else {
...
}
...
}
private void ImportArchive(byte[] file)
{
var fileStream = new MemoryStream(file);
var zip = ZipFile.Read(fileStream); //--> no exception!
...
}
Wo liegt der Unterschied zwischen diesen beiden Versionen? Warum kann die erste Version des übergebenen MemoryStream
nicht gelesen werden?
Haben Sie versucht, die Speicher-Stream-Position auf 0 zu setzen, bevor Sie 'ImportArchive' aufrufen? – Chrisi
Vielleicht ändert 'ZipFile.IsZipFile (stream)' die Stream-Position. Versuchen Sie, vor dem Lesen in der 'ImportArchive (MemoryStream s)' -Methode auf 0 zu setzen. –