Linux Lazarus:TFileStream 报告的文件大小错误
Linux Lazarus: Wrong FileSize Reported by TFileStream
我正在尝试通过 Filestream 读取我的文件以通过网络发送它,但我发现有些奇怪。我不确定为什么。
我的实际文件大小是 44.7KB,但是当文件流读取同一个文件时,它告诉我文件大小是 45228 字节或 45.2 KB。这是为什么?有办法解决这个问题吗?
fs:TFileStream;
fs := TFileStream.Create('myfile.dat', fmOpenRead or fmshareDenyWrite);
showmessage(inttostr(fs.Size));
一种可能性是,无论您使用什么来报告文件大小,都使用 kibibytes (1024 bytes) rather than kilobytes(1000 字节)测量大小。
45228 除以 1024 得到 44.2KiB。这仍然不完全匹配,但如果您的问题中存在转录错误,我不会感到惊讶。至少有一个,你写的是 FileSize
而不是 Size
(现在已通过问题编辑更正)所以我猜其他一些具体细节是不正确的。
除此之外,我认为问题很可能出在您获取文件大小的其他方法中。 TFileStream.Size
可以相信可以给出准确的值。如果这与其他一些措施不符,那么其他措施可能是错误的。
在 Linux 上,您可以使用 stat
命令获取文件大小的最终报告。我希望它产生与 TFileStream.Size
.
相同的值
我正在尝试通过 Filestream 读取我的文件以通过网络发送它,但我发现有些奇怪。我不确定为什么。 我的实际文件大小是 44.7KB,但是当文件流读取同一个文件时,它告诉我文件大小是 45228 字节或 45.2 KB。这是为什么?有办法解决这个问题吗?
fs:TFileStream;
fs := TFileStream.Create('myfile.dat', fmOpenRead or fmshareDenyWrite);
showmessage(inttostr(fs.Size));
一种可能性是,无论您使用什么来报告文件大小,都使用 kibibytes (1024 bytes) rather than kilobytes(1000 字节)测量大小。
45228 除以 1024 得到 44.2KiB。这仍然不完全匹配,但如果您的问题中存在转录错误,我不会感到惊讶。至少有一个,你写的是 FileSize
而不是 Size
(现在已通过问题编辑更正)所以我猜其他一些具体细节是不正确的。
除此之外,我认为问题很可能出在您获取文件大小的其他方法中。 TFileStream.Size
可以相信可以给出准确的值。如果这与其他一些措施不符,那么其他措施可能是错误的。
在 Linux 上,您可以使用 stat
命令获取文件大小的最终报告。我希望它产生与 TFileStream.Size
.