2013-06-03 12 views
6

私はVisual studio 2012、C#、silverlight、windows phone 8 appを使用しています。Windowsのストレージファイルにバイト配列を書き込む

ウェブサービスからデータを取得し、ウェブサービスを通じてbase64文字列の画像を取得します。

私はそれをバイト配列に変換し、今私はメモリのストリームを使用して、Windowsの電話のストレージので、それを保存したいですか?私はそれが正しいアプローチであるかどうかわかりません。私はそれを隔離されたストレージ、ローカルフォルダだけに保存​​したくないのです。なぜなら、人がリンクをタップした後に画像を表示したいからです。

これは私がこれまで持っていたものです。

そう
byte[] ImageArray; 
var image = Attachmentlist.Attachment.ToString(); 
imagename = Attachmentlist.FileName.ToString(); 
ImageArray = Convert.FromBase64String(image.ToString()); 

StorageFolder myfolder = Windows.Storage.ApplicationData.Current.LocalFolder; 
await myfolder.CreateFileAsync(imagename.ToString()); 
StorageFile myfile = await myfolder.GetFileAsync(imagename.ToString()); 


MemoryStream ms = new MemoryStream(); 

私はバイト配列を取得し、ストレージ・ファイルに書き込み、その後、再びそれを取得しますどのようにメモリストリームを初期化した後?ディスクにファイルを書き込むには

答えて

13

は、このコードを試してみてください。

StorageFile sampleFile = await myfolder.CreateFileAsync(imagename.ToString(), 
    CreateCollisionOption.ReplaceExisting); 
await FileIO.WriteBytesAsync(sampleFile, ImageArray); 

メモリストリームは、それがこの問題には適用されませんので、メモリに書き込まれたストリームを作成します。

+0

私は間違っていますが、FileIOの視覚的な基本的な名前空間ではないことを私に教えてください。もしそうならば、FileIOのVisual Studio版は何ですか?これまでのところGoogleは大いに役に立っていません – Arrie

+0

@Arrieはこれをチェックします:[doucmentation](http://msdn.microsoft.com/en-us/library/windows/apps/windows) .storage.fileio.writebytesasync)、Windows 8固有のクラスです。 – Rafal

+0

謝罪!それはうまくいった! :) – Arrie

5
 StorageFolder folder = ApplicationData.Current.LocalFolder; 
     StorageFile imageFile = await folder.CreateFileAsync("Sample.png", CreationCollisionOption.ReplaceExisting); 

     using (IRandomAccessStream fileStream = await imageFile.OpenAsync(FileAccessMode.ReadWrite)) 
     { 
      using (IOutputStream outputStream = fileStream.GetOutputStreamAt(0)) 
      { 
       using (DataWriter dataWriter = new DataWriter(outputStream)) 
       { 
        dataWriter.WriteBytes(imageBuffer); 
        await dataWriter.StoreAsync(); 
        dataWriter.DetachStream(); 

       } 
       //await outputStream.FlushAsync(); 
      } 
      //await fileStream.FlushAsync(); 
     }