gpt4 book ai didi

delphi - Peter 下面的代码是否存在内存泄漏?

转载 作者:行者123 更新时间:2023-12-03 15:40:57 25 4
gpt4 key购买 nike

我知道我不应该质疑 Peter Below,但我刚刚发现了这个代码片段 Text File Size当尝试调试一些旧的 D5 代码时。

在我看来,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 的文件会给出错误的输出。其次,它从文件系统元数据中读取文件大小,这可能并不总是与真实文件大小匹配。后一个问题可能不是您应该关心的问题。使用存储在文件系统元数据中的文件大小通常是相当合理的。

关于delphi - Peter 下面的代码是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32296135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com