2

我有一个处理Stream需要移植到 WinRT 的自定义的 .NET 代码。这样做的动机是,应用程序读取一个加密的文件(自定义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并在 Read/Write 方法中进行一些编码和解码,完整代码在这里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);永远不会读完流。当我在 read 方法中设置断点时MyStream,它会一直以 offset=0 调用(因此它永远不会完成)。

当我使用未加密的文件时,new ZipArchive(filestream , ZipArchiveMode.Read);一切正常,所以问题一定是MyStream实现。

知道有什么问题吗?与完整的 .NET 相比,自定义是否Stream需要 WinRT 上的不同实现?

4

1 回答 1

0

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

于 2013-03-23T20:39:56.153 回答