Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нетипизированные файлы [D7, XP]


Страницы:   1 2 3

!_SM_! ©   (2006-06-20 21:00:00) 

Здраствуйте! Подскажите пожалуйста как правильно работать с нетипизированными файлами т.е. запись/чтение данных своего типа.
Измучился уже с этой бедой
Вот как я делаю:
что здесь не так?

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, RXSpin, ExtCtrls;

type TData = record        //Мой тип данных
  Str1, Str2, Str3: PChar; //Здесь бы лучше тип String но сним вообще непонятка
  Val1, Val2: Integer;
  B1, B2: Byte;
  Val3, Val4: LongInt;
 end;

type
 TForm1 = class(TForm)
   edit1: TLabeledEdit;
   edval1: TRxSpinEdit;
   edval2: TRxSpinEdit;
   Label2: TLabel;
   Label3: TLabel;
   edval3: TRxSpinEdit;
   edval4: TRxSpinEdit;
   Label4: TLabel;
   Label5: TLabel;
   edit2: TLabeledEdit;
   Button1: TButton;
   Button2: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 DT: TData;
 FL: TStream;
 FlNm: String;
 Dir: String;

implementation

{$R *.dfm}

procedure SaveData;
var N: Integer;
begin
with Form1 do begin
 DT.Str1:=PChar(edit1.Text);
 DT.Str2:=PChar(edit2.Text);
 DT.Val1:=edVal1.AsInteger;
 DT.Val2:=edVal2.AsInteger;
 DT.Val3:=edVal3.AsInteger;
 DT.Val4:=edVal4.AsInteger;
 Fl:=TFileStream.Create(FlNm, fmOpenWrite or fmCreate);

 N:=StrLen(DT.Str1);                   //Здесь пробовал
 Fl.WriteBuffer(N, SizeOf(LongInt));   //разные варианты.
 Fl.WriteBuffer(DT.Str1^, N);          //Этот более менее работает
 N:=StrLen(DT.Str2);                   //Но тоже не правильно
 Fl.WriteBuffer(N, SizeOf(LongInt));
 Fl.WriteBuffer(DT.Str2^, N);

 Fl.WriteBuffer(DT.Val1, SizeOf(LongInt));
 Fl.WriteBuffer(DT.Val2, SizeOf(LongInt));
 Fl.WriteBuffer(DT.Val3, SizeOf(LongInt));
 Fl.WriteBuffer(DT.Val4, SizeOf(LongInt));
 Fl.Free;
end;
end;

procedure LoadData;
var N: Integer;
begin
with Form1 do begin
 Fl:=TFileStream.Create(FlNm, fmOpenRead);
 Fl.ReadBuffer(N, SizeOf(LongInt));      //И здесь пробовал
 Fl.ReadBuffer(DT.Str1^, N);             //соответственно
 Fl.ReadBuffer(N, SizeOf(LongInt));      //пробовал по разному
 Fl.ReadBuffer(DT.Str2^, N);

 Fl.ReadBuffer(DT.Val1, SizeOf(LongInt));
 Fl.ReadBuffer(DT.Val2, SizeOf(LongInt));
 Fl.ReadBuffer(DT.Val3, SizeOf(LongInt));
 Fl.ReadBuffer(DT.Val4, SizeOf(LongInt));

 edit1.Text:=DT.Str1;
 edit2.Text:=DT.Str2;
 edVal1.AsInteger:=DT.Val1;
 edVal2.AsInteger:=DT.Val2;
 edVal3.AsInteger:=DT.Val3;
 edVal4.AsInteger:=DT.Val4;
 Fl.Free;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 GetDir(0, Dir);
 FlNm:=Dir+'\Data.dat';
 //if FileExists(FlNm) then LoadData else SaveData;  //Вот так можно делать или нет т.е. в OnCreate формы присваивать полям разных едитов значения (LoadData)?
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveData;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if FileExists(FlNm) then LoadData;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 SaveData;
end;

end.


Вопрос наверное про файлы нираз ставился. Все перерыл, перепробовал - ничего не получаеться. Раньше с нетипизированными файлами не работал. Ответьте пожалуйста.
Спасибо.


Alien1769   (2006-06-20 21:02:00) [41]


> Здраствуйте! Подскажите пожалуйста как правильно работать
> с нетипизированными файлами т.е. запись/чтение данных своего
> типа

Как это записывать данные своего типа в нетипизированный файл ?!


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо