У меня есть код .NET, имеющий дело с настраиваемым Stream
, которое мне нужно передать в WinRT. Мотивация в том, что приложение читает файл, который зашифрован (пользовательский Stream
). В полном .NET Я используюИспользование пользовательского потока в приложении для Windows Store
var readFileStream = File.OpenRead(bookPath);
var readDecryptedStream = new MyStream(password, readFileStream);
//it is a zip file
var readZipFile = new ZipFile(readDecryptedStream);
//extract files from the zip file
MyStream
наследуется от Stream
и делает некоторые кодирования и декодирования в методах чтения/записи, полный код здесь http://dl.dropbox.com/u/73642/mystream.cs. Этот код отлично работает в .NET.
реализация My WinRT является
var file =await ApplicationData.Current.LocalFolder.GetFileAsync(bookPath); //I copied the same file to Local folder
var filestream = await file.OpenStreamForReadAsync();
var readDecryptedStream = new MyStream(password, readFileStream);
ZipArchive z = new ZipArchive(readDecryptedStream , ZipArchiveMode.Read);
Проблема с этим кодом является то, что new ZipArchive(readDecryptedStream , ZipArchiveMode.Read);
никогда не закончит чтение потока. Когда я устанавливаю точку останова в методе чтения MyStream
, он все время вызывается со смещением = 0 (поэтому он никогда не заканчивается).
Когда я использую незашифрованный файл с new ZipArchive(filestream , ZipArchiveMode.Read);
, все работает, поэтому проблема должна быть в реализации MyStream
.
Любая идея в чем проблема? Нужен ли обычай Stream
другой реализации на WinRT, чем в полной версии .NET?
В реализации WinRT вы используете 'readFlexiStream' для создания объекта' ZipArchive'. Откуда появляется 'readFlexiStream'? Может быть, вы должны использовать 'readDecryptedStream' вместо этого? –
@chuex a typo, извините –
В 'offset == 0' нет абсолютно ничего плохого. 'offset' относится к' buffer', а не к потоку. 'for (int i = 0; i