Запись потока в файл

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Запись потока в файл

Сообщение Roman Koff » 21.09.2009 (Пн) 14:38

Позорный вопрос, но чтото я заработался (туплю). Не могу вспомнить как записать поток в файл ...
Есть поток pStream as System.IO.Stream, как его записать в файл с именем C:\file.dat ?
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Запись потока в файл

Сообщение Williams » 21.09.2009 (Пн) 14:51

Например, так:
Код: Выделить всё
Dim file As New FileStream("C:\file.dat", FileMode.Create)

Dim stream As New MemoryStream

Dim streamBytes() As Byte = stream.ToArray

file.Write(streamBytes, 0, streamBytes.Length)
И вы думаете, что вас оставят в живых после прочтения этого поста?

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Запись потока в файл

Сообщение Roman Koff » 21.09.2009 (Пн) 14:54

Тоесть всеже через MemoryStream ... Значит не совсем маразматиком стал ;)
Спасибо ...

P.S. Просто думал, что есть более примитивный метод, типа SaveAs для asp:fileupload ...
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Запись потока в файл

Сообщение Roman Koff » 21.09.2009 (Пн) 15:25

А как в MemoryStream передать мой pStream?
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Re: Запись потока в файл

Сообщение Williams » 21.09.2009 (Пн) 15:32

Stream это абстрактный класс, от него идут все остальные стримы. Если надо преобразовать тип, юзай DirectCast.
И вы думаете, что вас оставят в живых после прочтения этого поста?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Запись потока в файл

Сообщение Nord777 » 21.09.2009 (Пн) 19:55

А как в MemoryStream передать мой pStream?
Как ты получаешь этот pStream?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Запись потока в файл

Сообщение Roman Koff » 22.09.2009 (Вт) 9:05

Изначально он получается от asp:fileupload, но дальше я его передаю процедуре-обработчику.
Конечно, скорее всего, я ограничусь в данном контексте методом SaveAs контрола, но чиста спортивный интерес, как сделать оптимальнее - есть.

Щас сделал так:
Код: Выделить всё
Dim _BufferSize As Integer = (1024 * 16)
Dim _Buffer() As Byte = New Byte((_BufferSize) - 1) {}
Dim _Count As Integer = pStream.Read(_Buffer, 0, _BufferSize)
Using _FileStream As New FileStream(_Path & _File & ".dat", FileMode.Create)
   Do While (_Count > 0)
      _FileStream.Write(_Buffer, 0, _Buffer.Length)
      _Count = pStream.Read(_Buffer, 0, _BufferSize)
   Loop
End Using


Но это явно не самый оптимальный вариант (накладные расходы) ...
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Запись потока в файл

Сообщение Nord777 » 22.09.2009 (Вт) 10:15

Но это явно не самый оптимальный вариант (накладные расходы) ...
Метод SaveAs делает практически тоже самое, что и предложил Williams. Так что не парься и пользуй SaveAs.
А в чем ты узрел накладные расходы?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Запись потока в файл

Сообщение Roman Koff » 22.09.2009 (Вт) 12:36

А в чем ты узрел накладные расходы?

Ну как минимум копирование одного потока в другой через буфер. Вобщем я понял, что это стандартная ситуация и париться не стоит, шаманских подходов нет ;)
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Запись потока в файл

Сообщение Nord777 » 22.09.2009 (Вт) 16:17

Ну как минимум копирование одного потока в другой через буфер.
В твоём случае - да, есть лишняя работа, а в SaveAs идет просто запись байтового массива(принятый файл) в FileStream безо всякой лишней перегонки.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26

    TopList