var f: file of Byte; size : Longint; begin if OpenDialog1.Execute then begin AssignFile(f, OpenDialog1.FileName); size := FileSize(f); end; end;
FileSize(myFile)如果: var myFile:File; //FileSize()返回的是文件字节数除以1024 var myFile:File of byte; //FileSize()返回的是文件字节数 var myFile:File of myType; //FileSize()返回的是文件字节数除以myType的大小 var myFile:textFile; //不能使用FileSize()
遍历去算一遍好了,windows都是自己算的,所以一定没有这样的函数了
function GetDirectorySize(const ADirectory: string): Integer; var Dir: TSearchRec; Ret: integer; Path: string; begin Result := 0; Path := ExtractFilePath(ADirectory); Ret := Sysutils.FindFirst(ADirectory, faAnyFile, Dir); if Ret<>0 then begin ShowMessage('路径输入错误'); exit; end; try while ret=0 do begin inc(Result, Dir.Size); if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then Inc(Result, GetDirectorySize(Path + Dir.Name + '\*.*')); Ret := Sysutils.FindNext(Dir); end; finally Sysutils.FindClose(Dir); end; end;上面是用递归的算法求出文件夹的大小。一般的文件夹返回的结果是正确的。但在Windows 2000下存在一些问题: 1. 当路径为 ...\winnt, ...\My Documents, 或包含了系统文件夹、系统文件的文件夹时返回的值总是小,有时能小几百兆 2. 当路径为 ...\Program Files时,返回的值干脆是 0怀疑是Windows 2000做了某些方面的限制。
f: file of Byte;
size : Longint;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
size := FileSize(f);
end;
end;
var myFile:File; //FileSize()返回的是文件字节数除以1024
var myFile:File of byte; //FileSize()返回的是文件字节数
var myFile:File of myType; //FileSize()返回的是文件字节数除以myType的大小
var myFile:textFile; //不能使用FileSize()
var
Dir: TSearchRec;
Ret: integer;
Path: string;
begin
Result := 0;
Path := ExtractFilePath(ADirectory);
Ret := Sysutils.FindFirst(ADirectory, faAnyFile, Dir);
if Ret<>0 then
begin
ShowMessage('路径输入错误');
exit;
end; try
while ret=0 do
begin
inc(Result, Dir.Size);
if (Dir.Attr in [faDirectory]) and (Dir.Name[1] <> '.') then
Inc(Result, GetDirectorySize(Path + Dir.Name + '\*.*'));
Ret := Sysutils.FindNext(Dir);
end;
finally
Sysutils.FindClose(Dir);
end;
end;上面是用递归的算法求出文件夹的大小。一般的文件夹返回的结果是正确的。但在Windows 2000下存在一些问题:
1. 当路径为 ...\winnt, ...\My Documents, 或包含了系统文件夹、系统文件的文件夹时返回的值总是小,有时能小几百兆
2. 当路径为 ...\Program Files时,返回的值干脆是 0怀疑是Windows 2000做了某些方面的限制。