现在我有一个Record类型的数据结构,比方说是
TTest = Record
Name: string;
Caption: String;
......
end; //注意,这里的Record里的项都是String类型,而不是String[255]样的短字符串类型. 也就是这里面的String类型的项有可能包含的字符串很长很长。现在我想把这个结构所包含的数据保存到文件中,通过BlockRead, BlockWrite来读取和保存,还望高手能给我一个例子,最好贴源码,也可以发邮件给我 [email protected]
非常感谢!
TTest = Record
Name: string;
Caption: String;
......
end; //注意,这里的Record里的项都是String类型,而不是String[255]样的短字符串类型. 也就是这里面的String类型的项有可能包含的字符串很长很长。现在我想把这个结构所包含的数据保存到文件中,通过BlockRead, BlockWrite来读取和保存,还望高手能给我一个例子,最好贴源码,也可以发邮件给我 [email protected]
非常感谢!
我想问的是当String很长的时候应该怎么办啊,
又或者说,我有很多分类信息,每一种信息都是String类型的,可能很长,通过什么方式来保存到文件中,之后也能从文件中读出信息。。
高手帮忙
Name: array[0..99] of string[255];//数组的长度是根据具体情况而定
......
......
end;不知道对您有没有帮助.
现在我有这么一个人信息:
姓名: AAAA
年龄: 32
简历: //这里的内容很长,具体长度不一定。现在我想把这么一个信息保存到文件中,并可以从这文件读取这些信息(保存成二进制格式),有没有高手帮忙啊。
谢谢!
[email protected]非常感谢! 加分50
是
[email protected]
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TEmployee = packed record
Name: string[10];
Gender: string[2];
Age: Integer;
ResumeSize: Integer;
end;
TFormDemo = class(TForm)
ButtonWrite: TButton;
ButtonRead: TButton;
EdtName: TLabeledEdit;
EdtGender: TLabeledEdit;
EdtAge: TLabeledEdit;
Resume: TMemo;
LabResume: TLabel;
PnlPicture: TPanel;
Picture: TImage; //留着你来完成
procedure ButtonWriteClick(Sender: TObject);
procedure ButtonReadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
FormDemo: TFormDemo;implementation{$R *.dfm}procedure TFormDemo.ButtonWriteClick(Sender: TObject);
var
F: File;
Employee: TEmployee;
Buffer: array of PChar;
BufferSize: Integer;
Stream: TStream;
begin
AssignFile(F, 'F:\Employee.Dat');
Reset(F, 1);
Stream := TMemoryStream.Create;
try
Resume.Lines.SaveToStream(Stream);
BufferSize := Stream.Size;
SetLength(Buffer, BufferSize);
Stream.Position := 0;
Stream.ReadBuffer(Pointer(Buffer)^, BufferSize);
Employee.Name := EdtName.Text;
Employee.Gender := EdtGender.Text;
Employee.Age := StrToInt(EdtAge.Text);
Employee.ResumeSize := BufferSize;
BlockWrite(F, Employee, SizeOf(Employee));
BlockWrite(F, Pointer(Buffer)^, BufferSize);
finally
Stream.Free;
CloseFile(F);
end;
end;procedure TFormDemo.ButtonReadClick(Sender: TObject);
var
F: File;
FMode: Integer;
Employee: TEmployee;
Buffer: array of PChar;
BufferSize: Integer;
Stream: TStream;
begin
AssignFile(F, 'F:\Employee.Dat');
FMode := FileMode;
FileMode := 0;
Reset(F, 1);
Stream := TMemoryStream.Create;
try
BlockRead(F, Employee, SizeOf(Employee));
EdtName.Text := Employee.Name;
EdtGender.Text := Employee.Gender;
EdtAge.Text := IntToStr(Employee.Age);
BufferSize := Employee.ResumeSize;
Seek(F, SizeOf(Employee));
SetLength(Buffer, BufferSize);
BlockRead(F, Pointer(Buffer)^, BufferSize);
Stream.WriteBuffer(Buffer[0], BufferSize);
Stream.Position := 0;
Resume.Lines.LoadFromStream(Stream);
finally
Stream.Free;
CloseFile(F);
FileMode := FMode;
end;
end;{ps: 留个作业你自己完成:加入你的照片. 最好还加上背景音乐。呵呵呵呵。}end.
=========
只读Read-only