gpt4 book ai didi

delphi - 获取文件大小 > 然后获取总大小?

转载 作者:行者123 更新时间:2023-12-03 15:22:36 31 4
gpt4 key购买 nike

这应该很容易,但我似乎无法正确理解,因为我似乎让自己感到困惑,并且在字符串、整数和 float 之间进行转换。

基本上,我在一列中使用文件名填充 TListView,并在另一列中将文件大小返回到相应的文件名。我正在使用从 here 找到的一个相当简洁的函数。 ,看起来像这样:

function FileSizeStr ( filename: string ): string;
const
// K = Int64(1000); // Comment out this line OR
K = Int64(1024); // Comment out this line
M = K * K;
G = K * M;
T = K * G;
var
size: Int64;
handle: integer;
begin
handle := FileOpen(filename, fmOpenRead);
if handle = -1 then
result := 'Unable to open file ' + filename
else try
size := FileSeek ( handle, Int64(0), 2 );
if size < K then result := Format ( '%d bytes', [size] )
else if size < M then result := Format ( '%f KB', [size / K] )
else if size < G then result := Format ( '%f MB', [size / M] )
else if size < T then result := Format ( '%f GB', [size / G] )
else result := Format ( '%f TB', [size / T] );
finally
FileClose ( handle );
end;
end;

返回的值例如:235.40 KB

因此,通过上述内容,我的 TListView 可能会像这样填充:

enter image description here

现在在“标签数据大小”中,我想返回 ListView 中文件的总大小,因此在本例中,“大小”列中的值需要相加才能返回总大小,如下所示:

1.28 MB + 313.90 KB + 541.62 KB + 270.96 KB

显然不能像这样添加,因为这些值包含小数点,有些值可能以 Kb 为单位,而其他值以 Mb 等为单位。这是我的问题,我想不出一个简单的解决方案来添加(获取)文件的总大小,然后以所示的相同格式字符串返回。

我真的很感激一些关于如何处理此类数据的见解或技巧,我只是不断地让自己对不同的转换等感到困惑,并且不太确定该怎么做。

提前非常感谢:)

更新1

根据 Marc B 的建议,我将函数更改为以下似乎有效的函数:

var
iFileSize: Int64;

implementation

function GetSizeOfFile(FileName: string): Int64;
var
Handle: Integer;
begin
Handle := FileOpen(FileName, fmOpenRead);

if Handle = -1 then
MessageDlg('Unable to open file ' + FileName, mtError, [mbOk], 0)
else try
iFileSize := iFileSize + FileSeek(Handle, Int64(0), 2);
finally
FileClose(Handle);
end;

Result := iFileSize;
end;

function FormatFileSize(AValue: Int64): string;
const
K = Int64(1024);
M = K * K;
G = K * M;
T = K * G;
begin
if AValue < K then Result := Format ( '%d bytes', [AValue] )
else if AValue < M then Result := Format ( '%f KB', [AValue / K] )
else if AValue < G then Result := Format ( '%f MB', [AValue / M] )
else if AValue < T then Result := Format ( '%f GB', [AValue / G] )
else Result := Format ( '%f TB', [AValue / T] );
end;

如果其他人需要它,它可能会有用:)

更新2

此外,请参阅 Ken White 发布的答案,它提供了更多有值(value)的信息,以及 GetSizeOfFile 函数的更清晰的更新,效果很好:

enter image description here

最佳答案

将“获取文件信息”与“格式化大小字符串”分成两个单独的函数。文件信息函数获取文件大小并将其添加到运行总计中,然后调用格式化函数将简单整数转换为“nice”字符串。

关于delphi - 获取文件大小 > 然后获取总大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280560/

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