2013-06-03 16 views
6

Używam aplikacji Visual Studio 2012, C#, silverlight, windows phone 8.Zapisuje tablicę bajtów do pliku pamięci w telefonie z systemem Windows

Otrzymujemy nasze dane z usługi internetowej, a za pośrednictwem usługi internetowej otrzymujemy obraz będący ciągiem base64.

Konwertuję go na tablicę bajtów, a teraz chcę ją zapisać do pamięci telefonu Windows, używając strumienia pamięci? Nie wiem, czy to właściwe podejście. Nie chcę zapisywać go w odizolowanym miejscu, tylko w lokalnym folderze, ponieważ chcę pokazać zdjęcie po tym, jak ktoś dotknął linku.

to jest to, co do tej pory miałem.

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

więc po I inicjowany strumień pamięci Jak zrobić tablicę bajtów i zapisać go do pliku pamięci, a potem pobrać go ponownie?

Odpowiedz

13

Aby zapisać plik na dysku wypróbować ten kod:

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

strumień pamięci tworzy strumień, który zapisuje się w pamięci, więc nie ma zastosowania do tego problemu.

+0

dzięki za szybką odpowiedź, poprawcie mnie jeśli się mylę, ale nie jest FileIO wizualną nazw podstawową? a jeśli tak, to jaka jest wersja studia FileIO na gołym okiem - google nie pomaga do tej pory – Arrie

+0

@Arrie sprawdź to: [doucmentation] (http://msdn.microsoft.com/en-us/library/windows/apps/windows .storage.fileio.writebytesasync), jego specyficzna klasa Windows 8. – Rafal

+0

Awesomeness! działało dobrze! :) – 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(); 
     } 
Powiązane problemy