加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 这个Peter Below代码是内存泄漏吗?

发布时间:2020-12-15 09:07:52 所属栏目:大数据 来源:网络整理
导读:我知道我不应该问Peter Peter,但我在尝试调试一些旧的D5代码时发现了这个代码片段 Text File Size. 在我看来,应该将Sysutils.FindClose称为函数的最后一行.如果结果为零,那是不是建立了FindFirst并挂起? 更多问题:它表明这是针对文本文件的,但是这不能用于
我知道我不应该问Peter Peter,但我在尝试调试一些旧的D5代码时发现了这个代码片段 Text File Size.

在我看来,应该将Sysutils.FindClose称为函数的最后一行.如果结果为零,那是不是建立了FindFirst并挂起?

更多问题:它表明这是针对文本文件的,但是这不能用于任何文件类型吗?一个更好的Delphi.FileSize(fname:string); ?

function TextfileSize(const name: string): LongInt;
var
  SRec: TSearchRec;
begin
  if FindFirst(name,faAnyfile,SRec) = 0 then
  begin
    Result := SRec.Size;
    Sysutils.FindClose(SRec);
  end
  else
    Result := 0;
end;

解决方法

It seems to me that the Sysutils.FindClose should be called as the last line of the function. If the Result is zero,doesn’t that leave the FindFirst established and hanging?

不.如果FindFirst失败,您不需要调用FindClose.对于现代版本的Delphi,无论FindFirst的结果如何,都可以安全地调用它.对于旧版本的Delphi,需要问题中的条件代码.无论如何,这里没有泄漏.

不幸的是,文档没有说清楚.确保这一点的唯一方法是阅读源代码.

It states this is for Text files,but couldn’t this be used for any file type?

对于所有类型的文件,此函数的运行方式完全相同.

A better Delphi.FileSize(fname : string); ?

我不知道你指的是哪个函数,但你问题中的函数有两个缺点.首先,它返回一个32位有符号整数,因此为大于2GB的文件提供错误输出.其次,它从文件系统元数据中读取文件大小,这可能并不总是与真实文件大小相匹配.后一个问题可能不是你应该关注的问题.使用存储在文件系统元数据中的文件大小通常是合理的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读