2011-08-01 8 views
2

IsolatedStorageFileStream으로부터 상속받은 XorIsoStoreFileStream이라는 클래스가 있습니다.이 클래스를 사용하면 stuff는 XOR "암호화"로 기록되며이 클래스를 사용하여 읽을 수도 있습니다. 다시 XOR합니다. 예를 들면 다음과 같습니다.IsolatedStorageFileStream에서 상속 한 사용자 정의 스트림을 사용하는 MediaElement의 SetSource

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 줄에 "Stream이 IsolatedStorageFileStream 유형이어야합니다"라는 NotSupportedException이 발생합니다.

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를 구현해야합니까? 마치 바퀴벌레를 재발 명한 거대한 잔인한 무기처럼 보입니다.
아니면 그냥 작동하지 않을까요? 파일의 암호 해독 된 부분을 임시 위치에 저장하고 SetSource를 일반 IsolatedStorageFileStream에 저장해야합니까?

답변

0

MediaStreamSource을 사용할 수 있지만 시간이 오래 걸립니다. 재생하기 직전에 IsolatedStorageFileStream의 인스턴스를 처리하고이를 재정의하거나 사용자 정의 클래스를 전달하는 대신 MediaElement으로 전달하는 것이 훨씬 쉽습니다.

네이티브 IsolatedStorageFileStream을 사용하여 SetSource을 전달해야하므로 사용자 정의 클래스를 전달하는 데 문제가 발생합니다 (in the official doc).

일반 스트림을 SetSource (System.IO.Stream)에 전달하면 Windows Phone 용 Silverlight에서 이 지원되지 않습니다. 그러나 Stream에서 파생 된 IsolatedStorageFileStream 클래스는 Windows Phone 용 Silverlight에서 지원되는 입니다.

+0

응답 해 주셔서 감사합니다. Dennis! 디스크에있는 모든 읽을 수있는 파일을 가지고 있지는 않지만 요구 사항입니다. 작동하는'IsolatedStorageFileStream'을 전달하면 어떻게 피할 수 있습니까? 나는 그것을 빨아 들여'MediaStreamSource'를 사용해야 할 수도 있지만, 실제로 보지 못했던 다른 트릭이나 가능한 해결 방법이 있었으면 좋겠다. – Nagisa

+0

하지만 이미 로컬 저장소에서 파일을로드하고 있습니다. 위의 예를 고려해 볼까요? 이미 어딘가에 저장되어 있습니다. –

+0

예, Xor 클래스는 파일 (인터넷)을 격리 된 저장소에 저장하므로 xor'd가 올라가고 MediaElement는 암호화되지 않은 일반 스트림을 사용할 때처럼 재생할 수 없습니다. – Nagisa

관련 문제