![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как передать данные из TMemoryStream в динамический массив? [D6, XP]
Petrovich © (2007-11-28 13:58:00)Подскажите в чем ошибка. Delphi 6
Задача: в поток читается бинарный файл. Затем эти данные надо передать в динамический массив.
Var Stream1, Stream2 : TStream;
Size : Integer;
actual : Integer;
TestArray : Array of Byte;
If not OpenDialog1.Execute
then
Exit
else
Begin
Stream1:=TFilestream.Create(OpenDialog1.FileName,fmOpenRead);
Stream2:=TMemoryStream.Create;
Stream2.Clear;
Stream2.LoadFromStream(Stream1);
Stream2.Position:=0;
Size:=Stream2.Size;
//Создаем динамический массив, с размером, равным считанному файлу
SetLength(TestArray,Size);
// actual - дополнительная переменная для отладки. Используется в просмотрщике.
actual:=Length(TestArray)*SizeOf(byte);
// В данном случае actual показывает реальный размер созданного массива
// Присваиваем адрес места размещения данных в потоке массиву.
TestArray:=Stream2.Memory;
actual:=Length(TestArray)*SizeOf(byte);
//Опа! Массив стал другого размера. И не факт, что там то, что надо.
End;
Anatoly Podgoretsky (2007-11-28 16:13:00) [1]> Dennis I. Komarov (28.11.2007 15:25:08) [8]
А абстрагировать в состоянии
SizeOf(Type)
А то у тебя получится как получилось у любителей вместо Integer указывать цифровую программу.
А получилось с ними страшное, их программы прекратили работать при переходе на Д2 и выше.
Сергей М. (2007-11-28 15:28:00) [2]
> TestArray:=Stream2.Memory;
Сам-то ты понял, что тем самым сказал ?
Dennis I. Komarov (2007-11-28 15:25:00) [3]> [7] Anatoly Podgoretsky © (28.11.07 15:18)
А я не говорил, что она не правильная, я говорил что она мне понравилась:
SizeOf(byte) => Считаем сколько байт занимает байт
Anatoly Podgoretsky (2007-11-28 15:18:00) [4]
> Dennis I. Komarov © (28.11.07 14:58) [6]
Ты уверен, что сказал умную вещь?
Как раз эта часть у автора правильная, в отличии от того что выше.
Dennis I. Komarov (2007-11-28 14:58:00) [5]+ Мне еще вот это понравились:
> SizeOf(byte);
Dennis I. Komarov (2007-11-28 14:57:00) [6]> [4] KilkennyCat © (28.11.07 14:52)
Ну, его еще надо суметь отыскать. Чем спасибо сказать, лучше еще и повыпендриваться.
KilkennyCat (2007-11-28 14:52:00) [7]
> Petrovich
Вам ответ дали. Или надо было еще поклоны отбить и пятки поцеловать?
Petrovich (2007-11-28 14:47:00) [8]Рамилю и Reindeer Moss Eater
Зубоскалить и ерничать большого ума не надо. Интеллекта, впрочем, тоже.
Это конференция для новичков. Не способны дать ответ - лучше помолчите, за умных сойдете.
Рамиль (2007-11-28 14:19:00) [9]Stream1.Read(TestArray[0], Size);
> // Присваиваем адрес места размещения данных в потоке массиву.
>
> TestArray:=Stream2.Memory;
До чего элегантное решение...
Reindeer Moss Eater (2007-11-28 14:06:00) [10]А сразу-то в массив читать прямо из файлстрима - не модно?