![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
При попытке присвоения данных из файла(через FileStream) динамическому массиву, вылетает ошибка. Если массив обычный,то работает все нормально, что сделать что бы и с динамическим было тоже самое?
Текст программы: Код:
var Form1: TForm1; A: Tfilestream; data: array of integer; i: integer; procedure TForm1.Button1Click(Sender: TObject); begin setlength(data,100); if opendialog1.Execute then A:=Tfilestream.Create(opendialog1.FileName, fmOpenRead); A.Read(data,sizeof(data)); for i:=0 to 99 do begin memo1.Lines.Add(inttostr(data[i])); end; end; ![]() |
|
#2
|
||||
|
||||
|
Цитата:
Давай зырить, вот смотри: Кусочек из твоего кода Код:
if opendialog1.Execute then A:=Tfilestream.Create(opendialog1.FileName, fmOpenRead); A.Read(data,sizeof(data)); Да и потом, если на то уж пошло, то должно быть чето типа A.ReadBuffer(data[0], Length(data)); Так-то, господин Змий. Олсо, существую спецовые ридеры и врайтеры (TReader, TWriter) для того, чтобы такой говнокод не набирать. |
|
#3
|
||||
|
||||
|
Вместо:
Код:
A.Read(data,sizeof(data)); Код:
A.Read(data,length(data)); ![]() Последний раз редактировалось angvelem, 28.11.2011 в 22:08. |
|
#4
|
|||
|
|||
|
Только
Код:
A.Read(data,length(data) * SizeOf(Integer)); |
|
#5
|
||||
|
||||
|
Код:
var
AFileStream: TFileStream;
Data: array of Byte;
begin
if not OpenDialog1.Execute then Exit;
AFileStream:=TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
try
SetLength(Data, AFileStream.Size);
AFileStream.Read(Data[0], Length(Data));
Memo1.Text:=Copy(PChar(@Data[0]), 1, Length(Data)); // это так...
finally
AFileStream.Free;
end;
end; |
|
#6
|
|||
|
|||
|
Спасибо за ответы. Но только не совсем понятно,считывание происходит побайтно как я понял и побайтно записывается в массив (length(data) равено A.size), а как сделать чтобы считалось по 4 байта,то есть как тип integer?
Вот так писал,эту проблему не решает Код:
A.Read(data,length(data) * SizeOf(Integer)); |