Delphi 创建 TFileStream 的访问冲突

Delphi Access violation creating TFileStream

我在 fs.create(...) 上收到创建 TFileStream 对象的访问冲突,但我真的不知道出了什么问题

var
  sr: TStreamReader;
  fs: TFileStream;
begin
   try
      fs.Create('aaa.ini',fmOpenRead);
      sr := tStreamReader.Create(fs,TEncoding.UTF8);
       with connAtomo do begin
        Close;
        with Params do begin
          Clear;
          while not sr.EndOfStream do begin
            add(sr.ReadLine);
          end;
        end;
      end;
      sr.Free;
      fs.free
   except
      on e: EFileStreamError do  begin
         showmessage('File error '+e.Message);
      end;
   end;

访问冲突是由创建 TFileStream 实例的错误方法引起的,导致 fs 变量具有无效值。与任何其他对象一样,您必须调用 class 构造函数并将结果分配给变量:fs := TFileStreaM.create('aaa.ini', fmOpenRead);.

我修改了你的代码:

var
  sr : TStreamReader;
  fs : TFileStream;
begin
   try
     fs := TFileStream.Create('aaa.ini', fmOpenRead);
     try
       sr := tStreamReader.Create(fs, TEncoding.UTF8);
       try
         connAtomo.Close;
         connAtomo.Params.Clear;
         while not sr.EndOfStream do
           connAtomo.Params.Add(sr.ReadLine);
       finally
         sr.Free;
       end;
     finally
       fs.Free
     end;
   except
      on E: EFileStreamError do
         ShowMessage('File error ' + E.Message);
   end;
end;

如您所见,我已经使用 try/finally 来保护分配的对象并删除不推荐的 with 用法。