2011-10-23 9 views
0

現在、このコードを使用して、medaiを独立したストレージに保存しています。メディアがローカルの場合、これはfrineで動作しますが、httpアドレスからmedaiを取得しようとするとURiKindにエラーが発生します。私は絶対から変わった。相対的な、しかしダイスはまだありません。HTTPからリソースを取得してIso Stoarageに保存

提案がありますか?

FYI - ファイル名= http://www.domain.com/media.wma

エラー: 'uriString' パラメーターは、絶対URIを表すので、相対URIを作成できません。

または:絶対的なUriが予想されます。

private void DownloadToIsoStore(string fileName) 
     { 

      string ringtonePath = GetRingtonePath(); 

      IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); 

      // If the file already exists, no need to "download", just return 
      if (isoStore.FileExists(fileName)) 
      { 
       return; 
      } 

      StreamResourceInfo sr = Application.GetResourceStream(new Uri(fileName, UriKind.Relative)); 

      using (BinaryReader br = new BinaryReader(sr.Stream)) 
      { 
       // Simulate "downloading" medai file 
       byte[] data = br.ReadBytes((int)sr.Stream.Length); 

       // Save to local isolated storage 
       SaveToIsoStore(fileName, data); 
      } 

     } 
+0

あなたはApplication.Get **リソース**ストリームは何だと思いますか? – SLaks

答えて

1

Uは、次のコード 1.Callメディアをダウンロードし、パラメータを使用してこの機能(http://www.domain.com/media.wma)

public void **GetMediaFile**(string httpPath) 
    { 
     WebClient wcMedia = new WebClient(); 
     wcMedia.OpenReadAsync(new Uri(httpPath)); 
     wcMedia.OpenReadCompleted += new OpenReadCompletedEventHandler(wcMedia_OpenReadCompleted); 
     wcMedia.AllowReadStreamBuffering = true; 

    } 

2.Eventハンドラを使用することができファイルを隔離ストレージ内の目的の(iso_path)場所にコピーします。

void wcMedia_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
    {  
     string iso_path="path where you want to put media file insode the isolated storage"; 
     var isolatedfile = IsolatedStorageFile.GetUserStoreForApplication(); 
     using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(iso_path, System.IO.FileMode.Create, isolatedfile)) 
     { 
      byte[] buffer = new byte[e.Result.Length]; 
      while (e.Result.Read(buffer, 0, buffer.Length) > 0) 
      { 
       stream.Write(buffer, 0, buffer.Length); 
      } 
     } 

}

+0

あなたのバッファはそれほど大きくすべきではありません。読み込まれた量だけを書いてください。 – SLaks

+0

ok私はそれを気にします – PCS

+0

また、ハンドラを追加した後に 'OpenReadAsyc'を呼び出すと、処理が速すぎる場合があります。 – SLaks

1

Application.GetResourceStreamは、アプリケーションに埋め込まれたリソースに相対URIをとります。
HTTPクライアントではありません。

代わりに、WebClientまたはHttpWebRequestクラスを使用する必要があります。

+0

私はそうかもしれないと思った。どのように私はこのコードにWebクライアントを実装するか、またはそれを書き直すことができますか? – Rhys

+0

私はWebclientとそのうまくいった罰金で書き直しました。それはあなたの助けになりました。 – Rhys

関連する問題