2013-03-13 1 views
2

У меня есть код .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?

+0

В реализации WinRT вы используете 'readFlexiStream' для создания объекта' ZipArchive'. Откуда появляется 'readFlexiStream'? Может быть, вы должны использовать 'readDecryptedStream' вместо этого? –

+0

@chuex a typo, извините –

+0

В 'offset == 0' нет абсолютно ничего плохого. 'offset' относится к' buffer', а не к потоку. 'for (int i = 0; i

ответ

0

Я решил его перезагрузить компьютер. Это очень странно, но иногда все потоки, включая чтение файлов из ApplicatonData, просто перестают работать, и мне приходится перезагружать компьютер. Это настоящая боль.

Смежные вопросы