首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi违规创建TFileStream

Delphi违规创建TFileStream
EN

Stack Overflow用户
提问于 2020-11-05 13:09:32
回答 1查看 353关注 0票数 0

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

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-05 13:37:08

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

我已经修改了你的代码:

代码语言:javascript
复制
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使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64697895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档