FUNCTION XHGET_FILE_FILESIZE(CONST FILENAME:STRING):INTEGER;//返回文件大小。
VAR
HID:CARDINAL;
TMP:_OFSTRUCT;
BEGIN
RESULT:=0;
TRY
IF FILEEXISTS(FILENAME) THEN
BEGIN
HID:=OPENFILE(PCHAR(FILENAME),TMP,GENERIC_READ);
RESULT:=GETFILESIZE(HID,NIL);
CLOSEHANDLE(HID);
END;
EXCEPT EXIT; END;
END;
function FileGetSize(FileName:string): Int64;
var w32fd: TWin32FindData; h: THandle;
begin
Result := 0;
if FileName='' then Exit;
h := Windows.FindFirstFile(PChar(FileName),w32fd);
if h <> INVALID_HANDLE_VALUE then
with w32fd do Result := nFileSizeHigh * MAXDWORD + nFileSizeLow;
Windows.FindClose(h);
end;
1.
function FSize(FileName: string): LongInt;
var
F: File;
begin
AssignFile(F, FileName);
reset(F,1);
Result := FileSize(F);
CloseFile(F);
end;
2.
function GetFileSize(const FileName: string): LongInt;
var
SearchRec: TSearchRec;
begin
try
if FindFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then
Result := SearchRec.Size
else Result := -1;
finally
SysUtils.FindClose(SearchRec);
end;
end;
var
f: file of Byte;
size: Longint;
S: string;
y: Integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
Reset(f);
try
size := FileSize(f);
S := 'File size in bytes: ' + IntToStr(size);
y := 10;
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
S := 'Seeking halfway into file...';
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
Seek(f, size div 2);
S := 'Position is now ' + IntToStr(FilePos(f));
Canvas.TextOut(5, y, S);
finally
CloseFile(f);
end;
end;
end;