我有一个处理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 上的不同实现?