GetFileSize

| No Comments | No TrackBacks

function GetFileSizeByFileStream(const FileName:String):int64;
var
FileStream:TFileStream;
begin
Result:=0;
FileStream:=TFileStream.Create(FileName,fmOpenRead,fmShareDenyNone);
try
Result:=FileStream.Size;
finally
FileStream.Free;
end;
end;
function GetFileSizeByAPI(const FileName:String):int64;
var
FileHandle:THandle;
HIFileSize:LongInt;
LOFileSize:LongInt;
begin
Result:=0;
FileHandle:=CreateFile(PChar(FileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
try
Result:=GetFileSize(FileHandle,@HIFileSize);
Result:=Result+HIFileSize*4294967296;
finally
CloseHandle(FileHandle);
end;
end;

修正一下:
function GetFileSizeByAPI(const FileName:String):int64;
var
FileHandle:THandle;
HIFileSize:DWORD;
LOFileSize:DWORD;
begin
Result:=0;
FileHandle:=CreateFile(PChar(FileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
try
LOFileSize:=GetFileSize(FileHandle,@HIFileSize);
Result:=LOFileSize+HIFileSize*4294967296;
finally
CloseHandle(FileHandle);
end;
end;

可以用下面的过程来测试:
procedure TestGetFileSize;
var
FileStream:TFileStream;
Begin
FileStream:=TFileStream.Create('d:\test.mem',fmCreate);
try
FileStream.Size:=16896666398;//大概是15.7GB
finally
FileStream.Free;
end;
ShowMessage('GetFileSizeByFileStream(''d:\test.mem'')='+IntToStr(GetFileSizeByFileStream('d:\test.mem')))
ShowMessage('GetFileSizeByAPI(''d:\test.mem'')='+IntToStr(GetFileSizeByAPI('d:\test.mem')))
End;

No TrackBacks

TrackBack URL: http://www.wujianrong.com/mt-tb.cgi/672

Leave a comment

About this Entry

This page contains a single entry by kevinwu published on May 7, 2006 6:00 PM.

福建省旅游风景区 was the previous entry in this blog.

电子杂志成资本新宠 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.