12

Bu, bir kaynak dosyadan Stream almanın doğru/tek yolu mu?Kaynak dosya/içerikten akış alma

Uri uri = new Uri(fullPath); 

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

    IRandomAccessStreamWithContentType randomAccessStream = 
     await storageFile.OpenReadAsync(); 

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

Diğer tüm kaynaklar (http ve yerel depolama) Stream nesnesi döndürür ve bir ya da diğer kullanırsa-else koda sahip olmak acı verici.

Ayrıca bunun dışında bir MemoryStream oluşturmaya çalıştım, ancak baytları dışarı çıkarmanın bir yolunu bile bulamadım ... Lütfen yardım edin.

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() kaynaktan okurken: http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.streams.iinputstream.readasync.aspx

Stream.Read() ve Stream.ReadAsync() şuna benzer ederken:

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

ve

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

Teşekkürler

cevap

23

Tamam Onu buldum!

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

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

StorageFile Akışı dönüştürmek mümkün mü? :O – jdnichollsc

7

Ayrıca bir daha az satırda yapabilirsiniz:

Stream stream = await storageFile.OpenStreamForReadAsync();