2013-06-03 2 views
6

Ich benutze Visual Studio 2012, C#, Silverlight, Windows Phone 8 App.Schreibe Byte-Array in Speicherdatei in Windows-Telefon

Wir erhalten unsere Daten von einem Webservice, und durch den Webservice erhalten wir ein Bild, das eine Base64-Zeichenfolge ist.

Ich konvertiere es in ein Byte-Array, und jetzt möchte ich es so speichern die Speicherung des Windows-Telefons, mit einem Speicher-Stream? Ich weiß nicht, ob es der richtige Ansatz ist. Ich möchte es nicht im isolierten Speicher speichern, sondern nur im lokalen Ordner, weil ich das Bild nach einer Person anzeigen möchte, die auf den Link geklickt hat.

das ist, was ich bisher habe.

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(); 

so, nachdem ich den Speicher-Stream initialisiert haben wie das Byte-Array Ich nehme und schreiben Sie es auf die Speicherdatei und danach ist es wieder abrufen?

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

Speicherstrom Strom erzeugt, der in dem Speicher schreibt, so dass es nicht für dieses Problem ist:

Antwort

13

Um Datei auf Disc versuchen, diesen Code zu schreiben.

+0

danke für Ihre schnelle Antwort, korrigieren Sie mich, wenn ich falsch liege, aber ist FileIO nicht ein visueller Namespace? und wenn ja, was ist die Visual Studio Version von FileIO - Google ist nicht viel Hilfe bis jetzt – Arrie

+0

@Arrie überprüfen Sie dies: [doucmentation] (http://msdn.microsoft.com/en-us/library/windows/apps/windows .storage.fileio.writebytesasync), Seine Windows 8-spezifische Klasse. – Rafal

+0

Awesomeness! es hat gut funktioniert! :) – 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(); 
     }