Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# Stream в byte[] / 10 сообщений из 10, страница 1 из 1
14.12.2017, 15:43
    #39569697
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
Собственно никогда раньше шарпом особо не интересовался, но вот понадобилось написать маленькую программку и завис

надо конвертировать System.IO.Stream в byte[]
делал как в инете описано раз 10

public static byte[] StreamToByteArray(Stream inputStream)
{
byte[] bytes = new byte[16*1024];
using (MemoryStream memoryStream = new MemoryStream())
{
int count;
while ((count = inputStream.Read(bytes, 0, bytes.Length)) > 0)
{
memoryStream.Write(bytes, 0, count);
}
return memoryStream.ToArray();
}
}

всё отрабатывается но на выходе пустой массив (входной поток inputStream.Length=1964, так на всякий случай :)) )
в дебаге выясняется что inputStream.Read вообще не выполняется ни разу
что я не догоняю
заранее извиняюсь если вопрос глупый, в шарпе я полный чайник, прошу тапками не кидаться
...
Рейтинг: 0 / 0
14.12.2017, 15:51
    #39569704
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
...
Рейтинг: 0 / 0
14.12.2017, 15:55
    #39569710
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
Извиняюсь, вот так лучше выглядит:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
      public static byte[] StreamToByteArray(Stream inputStream)
        {
            byte[] bytes = new byte[16*1024];
            using (MemoryStream memoryStream = new MemoryStream())
            {
                int count;
                while ((count = inputStream.Read(bytes, 0, bytes.Length)) > 0)
                {
                    memoryStream.Write(bytes, 0, count);
                }
                return memoryStream.ToArray();
            }
        }
...
Рейтинг: 0 / 0
14.12.2017, 16:00
    #39569718
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
а inputStream в начало "перемотан"?
...
Рейтинг: 0 / 0
14.12.2017, 16:08
    #39569727
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
для чтения потока в байтовый массив можно использовать BinaryReader, размер массива\потока нужно знать заранее, так как поток не гарантирует то, что размер будет известен
...
Рейтинг: 0 / 0
14.12.2017, 16:09
    #39569728
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
Shocker.Proа inputStream в начало "перемотан"?

Такая мысль была. Указатель там стоит на конце.
Извиняюсь за чайниковский вопрос, а как перемотать?
...
Рейтинг: 0 / 0
14.12.2017, 16:12
    #39569732
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
sergnn,
Stream.Seek()
https://msdn.microsoft.com/ru-ru/library/system.io.stream.seek(v=vs.110).aspx
Не все потоки поддерживают seek, вроде у Stream есть еще свойство CanSeek
...
Рейтинг: 0 / 0
14.12.2017, 16:25
    #39569742
sergnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
Roman Mejtes, спасибо. Помогло.
...
Рейтинг: 0 / 0
14.12.2017, 20:06
    #39569930
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
sergnnShocker.Proа inputStream в начало "перемотан"?

Такая мысль была. Указатель там стоит на конце.
Извиняюсь за чайниковский вопрос, а как перемотать?

Как вариант
Код: c#
1.
inputStream.Peremotka(v_nachalo);
...
Рейтинг: 0 / 0
18.12.2017, 13:49
    #39571375
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# Stream в byte[]
sergnn,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        /// <summary>
        /// Возвращает из стрима все байты
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static byte[] ToBytes(this Stream stream)
        {
            if (stream.CanSeek)
                stream.Position = 0;
            var bufferLen = (int)stream.Length;
            var buffer = new byte[bufferLen];
            stream.Read(buffer, 0, bufferLen);
            return buffer;
        }
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# Stream в byte[] / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]