2013-06-03 46 views
6

我正在使用Visual Studio 2012,C#,Silverlight,Windows Phone 8應用程序。寫入字節數組到存儲文件在Windows Phone中

我們從web服務獲取數據,並通過web服務獲得一個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的Visual Basic命名空間?如果是的話,FileIO的視覺工作室版本是什麼 - 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(); 
     } 
相關問題