我知道我不应该问Peter Peter,但是我在尝试调试一些旧的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;
Run Code Online (Sandbox Code Playgroud)
在我看来,应该将Sysutils.FindClose称为函数的最后一行.如果结果为零,那是不是建立了FindFirst并挂起?
不,FindClose如果FindFirst失败,您无需致电.对于Delphi的现代版本,无论结果如何,都可以安全地调用它FindFirst.对于旧版本的Delphi,需要问题中的条件代码.无论如何,这里没有泄漏.
不幸的是,文档没有说清楚.确保这一点的唯一方法是阅读源代码.
它声明这是用于文本文件,但是这不能用于任何文件类型?
对于所有类型的文件,此函数的运行方式完全相同.
一个更好的Delphi.FileSize(fname:string); ?
我不知道你指的是哪个函数,但你问题中的函数有两个缺点.首先,它返回一个32位有符号整数,因此为大于2GB的文件提供错误输出.其次,它从文件系统元数据中读取文件大小,这可能并不总是与真实文件大小相匹配.后一个问题可能不是你应该关注的问题.使用存储在文件系统元数据中的文件大小通常是合理的.
| 归档时间: |
|
| 查看次数: |
292 次 |
| 最近记录: |