2013-03-13 53 views
2

我有一个.NET代码处理我需要移植到WinRT的自定义Stream。其动机是,该应用程序读取加密的文件(自定义Stream)。在完整的.NET我使用Stream在Windows应用商店应用中使用自定义流

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继承和做一些编码和解码的读/写方法,完整的代码是在这里http://dl.dropbox.com/u/73642/mystream.cs。此代码在.NET中正常工作。

我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读取方法中设置一个断点时,它始终被offset = 0调用(因此它永远不会结束)。

当我使用未加密的文件与new ZipArchive(filestream , ZipArchiveMode.Read);比一切正常,因此问题必须是MyStream实施。

任何想法是什么问题?自定义Stream在WinRT上需要不同的实现方式吗?

+0

在WinRT实现中,您使用'readFlexiStream'来构建'ZipArchive'对象。 'readFlexiStream'从哪里来?也许你应该使用'readDecryptedStream'来代替? – 2013-03-13 16:21:38

+0

@chuex a typo,sorry – 2013-03-13 22:39:40

+0

'offset == 0'绝对没有错。 'offset'指的是'缓冲区'而不是流。对于(int i = 0; i 2013-03-15 09:58:22

回答

0

我解决了它通过重新启动我的电脑。这很奇怪,但有时所有的流,包括从ApplicatonData读取文件只是停止工作,我不得不重新启动计算机。这是一个真正的痛苦。