Подтвердить что ты не робот

Получение потока из файла/содержимого ресурса

Является ли это правильным/единственным способом получения потока из файла ресурсов?

    Uri uri = new Uri(fullPath);

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

    IRandomAccessStreamWithContentType randomAccessStream = 
      await storageFile.OpenReadAsync();

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

Все мои другие источники (http и локальное хранилище) возвращают объект Stream, и очень больно иметь код if-else, который использует тот или иной.

Я также пытался просто создать MemoryStream, но я даже не могу найти способ получить байты... Пожалуйста, помогите.

    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() при чтении с ресурса: http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.streams.iinputstream.readasync.aspx

в то время как Stream.Read() и Stream.ReadAsync() выглядят следующим образом:

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

и

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

Спасибо

4b9b3361

Ответ 1

Хорошо, я нашел его!

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

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

Ответ 2

Вы также можете сделать это в одной строке:

Stream stream = await storageFile.OpenStreamForReadAsync();