首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么把TStrings存入记录文件中

2012-02-08 
如何把TStrings存入记录文件中?unitUnit1interfaceusesWindows,Messages,SysUtils,Variants,Classes,Grap

如何把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方法

热点排行