如何把TStrings存入记录文件中?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TDDML=Record //调度命令
CZBZ:TStrings;//操作步骤
end;
DDMLFileType=file of TDDML;
TForm1 = class(TForm)
StringGrid1: TStringGrid;
WriteButton: TButton;
ReadButton: TButton;
procedure WriteButtonClick(Sender: TObject);
procedure ReadButtonClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WriteButtonClick(Sender: TObject);
var DDML:TDDML;
DDMLFile:DDMLFileType;
FileName:string;//文件名
begin
FileName:= 'c:\调度命令 ';
AssignFile(DDMLFile,FileName);
if FileExists(FileName) then
Reset(DDMLFile)
else
Rewrite(DDMLFile);
DDML.CZBZ:=TStringList.Create;
DDML.CZBZ.Add( '第一步 ');
DDML.CZBZ.Add( '第二步 ');
seek(DDMLFile,0);
write(DDMLFile,DDML);
CloseFile(DDMLFile);
end;
procedure TForm1.ReadButtonClick(Sender: TObject);
var DDML:TDDML;
DDMLFile:DDMLFileType;
FileName:string;//文件名
i:Integer;
begin
FileName:= 'c:\调度命令 ';
AssignFile(DDMLFile,FileName);
if FileExists(FileName) then
Reset(DDMLFile)
else
Rewrite(DDMLFile);
if FileSize(DDMLFile) <> null then
begin
seek(DDMLFile,0);
Read(DDMLFile,DDML);
end;
CloseFile(DDMLFile);
for i:=0 to DDML.CZBZ.Count-1 do
StringGrid1.Cells[0,i]:=DDML.CZBZ[i];
end;
end.
运行程序,点击WriteButton后,再点击ReadButton,StringGrid1中会正确地显示操作步骤,
关掉程序,再重新运行,如果直接点击ReadButton,就会出现如下错误:
"Access violation at address 5320534D. Read of address 5320534D. "
如何把TStrings存入记录文件中?
[解决办法]
var DDML:TDDML;
begin
DDML.CZBZ:=TStringList.Create;
这里DDML都没有实例化, 就引用它的属性?
很多问题, 不想看
[解决办法]
关注
[解决办法]
Delphi里的对象变量都是指针,你这样写只是把TStrings的指针地址写进去了,写进去之后马上读出来没有问题,但当下次运行时,原来的地址已经不再属于你的程序了,所以会出错。
[解决办法]
确实存在很多的问题~~
[解决办法]
直接用TStrings的SaveToFile及LoadFromFile方法