Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Внизнасчет динамичских массивов Найти похожие ветки
← →
Yank (2002-09-26 00:18) [0]Помогите, пожалуйста!
Я хочу сохранить в файл данных запись, содержащую динамический массив, но функция sizeOf возвращает размер самой записи без учета размера дин. массива, как быть? (Только начало записи сохраняется в файл)
← →
Rouse_ (2002-09-26 00:50) [1]полный юнит из моей программы
unit GlobalUnit;
interface
uses
Classes, ComCtrls, SysUtils;
type TPeriodical = (plOneTime, plEveryday, plWeekly, plMonthly, plStartUp);
type TSpetial = (spNone, spShutdown, spPowerOff, spScandisk, spDefragment);
type TStyle = (stNone, stOneTime, stWorck, stWeekend, stEveryday, stEveryweeck, stEveryMonth, stEveryMonthWeek);
type TDelete = (deNone, deCount, deTime);
type TTask = packed record
TaskID : Integer;
Name : String[255];
TaskMessage : String[255];
TaskSound : String[255];
FilePath : String[255];
Run : Boolean;
Priority : TThreadPriority;
Spetial : TSpetial;
SpetialDrive : Char;
Periodical : TPeriodical;
TimeStamp : TDateTime;
Style : TStyle;
FirstParam : Byte;
SeckondParam : Integer;
Length : TDelete;
DelParam : Double;
LastStart : TDateTime;
NextStart : TDateTime;
end;
var
TaskArray : array [0..100] of TTask;
TaskCount: Byte;
procedure AddTask( Value: TTask);
procedure SaveTasks;
procedure LoadTasks;
procedure ShowTasks(var ListView: TListView);
procedure GetNextStart( var Task: TTask);
implementation
procedure AddTask( Value: TTask);
begin
TaskArray[TaskCount] := Value;
Inc(TaskCount);
end;
procedure SaveTasks;
var
F: file of TTask;
i: Byte;
begin
AssignFile(f,"c:\Test.tsk");
Rewrite(f);
for i:= 0 to TaskCount-1 do
Write(f,TaskArray[i]);
CloseFile(f);
end;
procedure LoadTasks;
var
F: file of TTask;
begin
TaskCount := 0;
if not FileExists("c:\Test.tsk") then Exit;
AssignFile(f,"c:\Test.tsk");
Reset(f);
while not EOF(f) do begin
Read(f,TaskArray[TaskCount]);
Inc(TaskCount);
end;
CloseFile(f);
end;
procedure ShowTasks(var ListView: TListView);
var
i:Byte;
begin
if TaskCount = 0 then Exit;
for i:= 0 to TaskCount-1 do begin
with ListView.Items.Add do begin
Caption := TaskArray[i].Name;
SubItems.Add(DateToStr(TaskArray[i].NextStart));
if TaskArray[i].LastStart = 0 then SubItems.Add("none") else
SubItems.Add(DateToStr(TaskArray[i].LastStart));
SubItems.Add(TaskArray[i].TaskMessage);
SubItems.Add(TaskArray[i].FilePath );
end;
end;
end;
procedure GetNextStart(var Task: TTask);
begin
if Task.NextStart = 0 then Task.NextStart := Task.TimeStamp;
case Task.Style of
stOneTime: //
← →
Rouse_ (2002-09-26 00:52) [2]Будут вопросы, задавай сюда
Желаю успехов
← →
Zuvom (2002-09-26 01:03) [3]Я всегда при работе с динамическими массивами использую переменную, которая является длиной массива.
← →
Aleks1 (2002-09-26 04:26) [4]Для динамических массивов определяющей является не функция SizeOf, а функция Length. При записи в файл определяй длину дин. массива и записывай столько байт, сколько нужно. Имхо, стоит записать и саму длину (или кол-во элементов массива), для последущего считывания.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.07;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c