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

Вниз

чтение из файла   Найти похожие ветки 

 
ИльяС   (2007-06-22 12:17) [0]

При копировании статического массива из файла проходит все как надо.
Знаю что динамический массив это указатель. Как мне скопировать из файла динамический массив.


 
Плохиш ©   (2007-06-22 12:19) [1]

1. Распределить память и так же как и статический массив
2. В цикле.


 
Сергей М. ©   (2007-06-22 12:22) [2]


> мне скопировать из файла динамический массив


Смотря как он туда попал


 
Ильяс   (2007-06-22 12:27) [3]

1 вариант проходит
File.Read(StatArray,Length(StatArray));

2. вариант не прохрдит
SetLength(DinamicArray,LengthDinamicArray)
File.Read(DinamicArray,Length(DinamicArray));


 
Плохиш ©   (2007-06-22 12:30) [4]


> File.Read(DinamicArray[0],Length(DinamicArray));


 
Инс   (2007-06-22 12:31) [5]

При сохранении в файл - сначала записывайте размер. При чтении - сначала читайте размер, потом устанавливайте массиву полученный размер с пом. SetLength, а потом - читайте.
Запись:
var
 S: TFileStream;
 arr: packed array of <тип элемента>;
begin
 S:=TFileStream.Create(FileName,fmCreate);
 try
   S.WriteBuffer(Length(arr),SizeOf(Integer));
   S.WriteBuffer(Pointer(arr)^,Length(arr)*SizeOf(<тип элемента>));
 finally
   S.Free;
 end;
end;


Чиение:
var
 S: TFileStream;
 arr: packed array of <тип элемента>;
 Size: Integer;
begin
 S:=TFileStream.Create(FileName,fmOpenRead);
 try
   S.ReadBuffer(Size,SizeOf(Integer));
   SetLength(arr,Size);
   S.ReadBuffer(Pointer(arr)^,Size*SizeOf(<тип элемента>));
 finally
   S.Free;
 end;
end;


 
MBo ©   (2007-06-22 12:32) [6]

File.Read(DinamicArray[0], Length(DinamicArray)*SizeOf(DinamicArray[0]))


 
Gydvin ©   (2007-06-22 13:01) [7]


> File.Read(DinamicArray[0],

Во кстати тоже так читаю. Вопрос. Возможны ли в этом случае, какие либо неожиданости?


 
Anatoly Podgoretsky ©   (2007-06-22 13:21) [8]

> Инс  (22.06.2007 12:31:05)  [5]

Не нужно, а главное неправильно, потом будет кричать памяти не хватает


 
Anatoly Podgoretsky ©   (2007-06-22 13:23) [9]

> Anatoly Podgoretsky  (22.06.2007 13:21:08)  [8]

Насчет неправильно погорячился


 
ИльяС ©   (2007-06-22 14:32) [10]

Работает вариант:

File.Read(Pointer(DinamicArray)^,Length(DinamicArray));


 
Инс   (2007-06-22 14:35) [11]


> Работает вариант:


Без умножения на SizeOf(<тип элемента>)? packed array of Byte (Char) что ли?


 
ИльяС ©   (2007-06-22 14:54) [12]


> Без умножения на SizeOf(<тип элемента>)? packed array of
> Byte (Char) что ли?

Да Byte
Спасибо за помощь



Страницы: 1 вся ветка

Текущий архив: 2007.07.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-1178985928
mr1Andersen
2007-05-12 20:05
2007.07.15
Здравствуйте Мастера. Каким образом Delphi кодирует(запоминает) в


6-1153741295
integerr
2006-07-24 15:41
2007.07.15
Internet Explorer + *.gif


15-1181691118
programmerts
2007-06-13 03:31
2007.07.15
Глюк с Delphi 6.


2-1182517334
harisma
2007-06-22 17:02
2007.07.15
В чем разница?


3-1176832923
isasa
2007-04-17 22:02
2007.07.15
Строка ключей и оператор SELECT