![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нетипизированные файлы [D7, XP]
!_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]
> Здраствуйте! Подскажите пожалуйста как правильно работать
> с нетипизированными файлами т.е. запись/чтение данных своего
> типа
Как это записывать данные своего типа в нетипизированный файл ?!