Ich habe es satt gehabt immer die unterschiedlichen Dateigrössen vom Windos-Explorer
und den üblichen Methoden zu erhalten und deswegen mal angefangen, das ganze
in eine Function zu packen.
Ihr könnt damit machen, was Ihr wollt, wäre schön wenn Ihr auch was anbieten könntet.
Delphi-Quellcode:
unit MyToolsU;
//V 1.1
//by BusyByte
interface
Type TFSRes=Record
i64Res_:int64;
iRes_:integer;
dRes_:Double;
SRes_1:
String;
SRes_2:
String;
end;
function MyGetFileSize(
const FileName:
String): TFSRes;
implementation
Uses Windows,SysUtils;
function MyGetFileSize(
const FileName:
String): TFSRes;
var FileHandle: Cardinal;
var Data: WIN32_FIND_DATA;
Tmp:
String;
L1:integer;
begin
Result.iRes_ := -1; Result.i64Res_:=-1; Result.dRes:=-1;
Result.SRes_1:='
'; Result.SRes_2:='
';
FileHandle := FindFirstFile(PChar(FileName), Data);
try
if FileHandle > 0
then
with Result
do
begin
iRes_:=(Data.nFileSizeLow + 1023)
div 1024;
//Werde die Stringumwandlungen später noch in eine Function auslagern=Speedmode
dRes_:=iRes_;
Tmp:=Format('
%n', [dRes_]);
L1:=Length(Tmp);
Delete(Tmp,L1-2,L1);
SRes_1:=Tmp+'
KB';
Int64Rec(Result.i64Res_).Hi := Data.nFileSizeHigh;
Int64Rec(Result.i64Res_).Lo := Data.nFileSizeLow;
dRes_:=Result.i64Res_;
Tmp:=Format('
%n', [dRes_]);
L1:=Length(Tmp);
Delete(Tmp,L1-2,L1);
SRes_2:=Tmp+'
Bytes';
end;
finally Windows.FindClose(FileHandle);
end;
end;
end.
//EDIT
dRes wird eigentlich nur für die Umsetzung mit Format() benötigt und könnte auch temporär gehalten werden.
Aufruf z.B. mit
Delphi-Quellcode:
Uses MyToolsU;
.
.
.
with MyGetfileSize(Filename_) do
Label1.Caption:=SRes_1+'(' +SRes_2+')';
22.02.2008 1.30Uhr : Neue Version V1.1 eingestellt