Вчера у меня была странная проблема: Когда я хотел передать файл почтового индекса, как byte[]
и прочитать его, я получил Ionic.Zip.ZipExpception
MemoryStream не читается, когда в качестве параметра
не может прочитать, что как 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
...
}
Теперь, если я передать byte[]
в качестве параметра, а не MemoryStream
, все работает отлично:
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!
...
}
В чем разница между этими двумя версиями? Почему не может быть прочитана первая версия прошедшего MemoryStream
?
Пробовал ли вы настройку потока потоков памяти на 0, прежде чем вы вызовете 'ImportArchive'? – Chrisi
Возможно, 'ZipFile.IsZipFile (поток)' изменяет положение потока. Перед чтением попробуйте установить его в 0 в свой метод 'ИмпортArchive (MemoryStream s)'. –