Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизКак передать данные из TMemoryStream в динамический массив? Найти похожие ветки
← →
Petrovich (2007-11-28 13:58) [0]Подскажите в чем ошибка. 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;
← →
Reindeer Moss Eater © (2007-11-28 14:06) [1]А сразу-то в массив читать прямо из файлстрима - не модно?
← →
Рамиль © (2007-11-28 14:19) [2]Stream1.Read(TestArray[0], Size);
> // Присваиваем адрес места размещения данных в потоке массиву.
>
> TestArray:=Stream2.Memory;
До чего элегантное решение...
← →
Petrovich (2007-11-28 14:47) [3]Рамилю и Reindeer Moss Eater
Зубоскалить и ерничать большого ума не надо. Интеллекта, впрочем, тоже.
Это конференция для новичков. Не способны дать ответ - лучше помолчите, за умных сойдете.
← →
KilkennyCat © (2007-11-28 14:52) [4]
> Petrovich
Вам ответ дали. Или надо было еще поклоны отбить и пятки поцеловать?
← →
Dennis I. Komarov © (2007-11-28 14:57) [5]> [4] KilkennyCat © (28.11.07 14:52)
Ну, его еще надо суметь отыскать. Чем спасибо сказать, лучше еще и повыпендриваться.
← →
Dennis I. Komarov © (2007-11-28 14:58) [6]+ Мне еще вот это понравились:
> SizeOf(byte);
← →
Anatoly Podgoretsky © (2007-11-28 15:18) [7]
> Dennis I. Komarov © (28.11.07 14:58) [6]
Ты уверен, что сказал умную вещь?
Как раз эта часть у автора правильная, в отличии от того что выше.
← →
Dennis I. Komarov © (2007-11-28 15:25) [8]> [7] Anatoly Podgoretsky © (28.11.07 15:18)
А я не говорил, что она не правильная, я говорил что она мне понравилась:
SizeOf(byte) => Считаем сколько байт занимает байт
← →
Сергей М. © (2007-11-28 15:28) [9]
> TestArray:=Stream2.Memory;
Сам-то ты понял, что тем самым сказал ?
← →
Anatoly Podgoretsky © (2007-11-28 16:13) [10]> Dennis I. Komarov (28.11.2007 15:25:08) [8]
А абстрагировать в состоянии
SizeOf(Type)
А то у тебя получится как получилось у любителей вместо Integer указывать цифровую программу.
А получилось с ними страшное, их программы прекратили работать при переходе на Д2 и выше.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c