Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.23;
Скачать: CL | DM;

Вниз

Как передать данные из 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
15-1195682297
GanibalLector
2007-11-22 00:58
2007.12.23
Россия в ЕВРО2008


15-1195771536
Real
2007-11-23 01:45
2007.12.23
Поиск HTML (по верстке)


15-1195157054
palva
2007-11-15 23:04
2007.12.23
Тут недавно спрашивали, как шифроваться в аське


3-1187101224
boriss_
2007-08-14 18:20
2007.12.23
Выбор данных посредством Хранимой процедуры в Oracle


1-1191498439
Kerk
2007-10-04 15:47
2007.12.23
Количество бит в байте