12

Czy jest to właściwy/jedyny sposób uzyskania Stream z pliku zasobów?Uzyskiwanie strumienia z pliku/treści zasobów

Uri uri = new Uri(fullPath); 

    StorageFile storageFile = 
     await Windows.Storage.StorageFile. 
     GetFileFromApplicationUriAsync(uri); 

    IRandomAccessStreamWithContentType randomAccessStream = 
     await storageFile.OpenReadAsync(); 

    IInputStream resourceStream = (IInputStream) 
     randomAccessStream.GetInputStreamAt(0); 

Wszystkie moje inne źródła (HTTP i lokalnej pamięci) zwraca obiekt Stream, i to jest bolesne, aby mieć do kodu if-else, który używa jednego lub drugiego.

Próbowałem też po prostu utworzyć MemoryStream z tego, ale nie mogę nawet znaleźć sposobu na wydobycie bajtów ... Proszę o pomoc.

uint size = (uint)randomAccessStream.Size; 
    IBuffer buffer = new Windows.Storage.Streams.Buffer(size); 
    await randomAccessStream.ReadAsync(buffer, size, 
     InputStreamOptions.None); 

    Stream stream = new MemoryStream(buffer); // error takes byte[] not IBuffer 

IInputStream.ReadAsync() podczas odczytu z zasobów: http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.streams.iinputstream.readasync.aspx

podczas Stream.Read() i Stream.ReadAsync() wygląda następująco:

http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx

i

http://msdn.microsoft.com/en-us/library/hh137813.aspx

Dzięki

Odpowiedz

23

Ok Znalazłem!

StorageFile storageFile = 
     await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri); 

    var randomAccessStream = await storageFile.OpenReadAsync(); 
    Stream stream = randomAccessStream.AsStreamForRead(); 
+0

jest możliwe konwertowanie strumienia do StorageFile? : o – jdnichollsc

7

Można również zrobić to w jeden mniej linii:

Stream stream = await storageFile.OpenStreamForReadAsync(); 
Powiązane problemy