IsolatedStorageFileStream

IsolatedStorageFileStream

我有一个名为XorIsoStoreFileStream的类,该类继承自IsolatedStorageFileStream,要点是,使用该类时,将使用XOR“加密”编写内容,并且在对它进行XOR还原时也可以使用该类读取该内容。例如:

public override int Read( byte[] buffer, int offset, int count )
{
    int startbyte = (int)base.Position;
    int readlength = base.Read( buffer, offset, count );
    xor( startbyte, buffer );

    return readlength;
}


在程序中的其他所有地方似乎都可以正常工作。现在,我需要从那里播放mp3文件,并且由于覆盖了Read和ReadByte,它应该可以正常工作,就像我给SetSource提供了IsolatedStorageFileStream一样。虽然不会上我的Xor课程。当我打游戏时,它在SetSource行上命中了NotSupportedException,说:“流必须是IsolatedStorageFileStream类型。”

using( var appStorage = IsolatedStorageFile.GetUserStoreForApplication() )
{
    if( appStorage.FileExists( path ) )
    {
        using( var stream = new XorIsoStoreFileStream( path, FileMode.Open, appStorage ) )
        {
            App.MainAudioPlayer.SetSource( stream );  // how to put Xor stream here?
        }
    }
}


还有其他我可以覆盖的东西,例如SetSource本身吗?似乎没有帮助。
我必须实现MediaStreamSource吗?这似乎是巨大的矫over过正,重新发明了轮子,等等。
还是这只是行不通?我是否必须将文件的解密部分保存到临时位置,并将SetSource保存到普通的IsolatedStorageFileStream?

最佳答案

您可以使用MediaStreamSource,但这将非常耗时。在您的情况下,在播放之前立即处理IsolatedStorageFileStream实例并将其传递给MediaElement而不是进行覆盖和传递自定义类会更加容易。

传递自定义类会遇到问题,因为您需要使用本机IsolatedStorageFileStream将其通过SetSource传递,如in the official doc所述。


  不能将通用流传递给SetSource(System.IO.Stream)
  Windows Phone的Silverlight支持。然而
  从Stream派生的IsolatedStorageFileStream类是
  在Windows Phone的Silverlight中提供支持。

关于c# - MediaElement的SetSource使用继承自IsolatedStorageFileStream的自定义流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6905381/

10-13 03:14