在Windows应用商店应用中使用自定义流

时间:2013-03-13 08:28:00

标签: c# encryption windows-8 stream microsoft-metro

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

 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中运行良好。

我的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上是否需要与完整.NET中不同的实现?

1 个答案:

答案 0 :(得分:0)

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