procedure TForm1.Button2Click(Sender: TObject); var tFile: File of Byte; sFile: String; begin sFile := 'c:\1212.exe'; AssignFile(tFile,sFile); Reset(tFile); ShowMessage(IntToStr(FileSize(tFile))); CloseFile(tFile); end;
gz!上面的方法在文件较小时可行。如果文较较大,比如1G,运行速度就会相当的慢,熟悉 API 的兄弟,是不是有较简单的Windows函数可以快速返回文件长度呢?
to:genphone_ru(票票) File of Byte的Reset默认是以100byte为一个单元,所以用FileSize返回的并不是OS默认的文件大小。
procedure TForm1.Button3Click(Sender: TObject); var l_SR: TSearchRec; sFile: String; begin if not OpenDialog1.Execute then Exit; sFile := OpenDialog1.FileName; if FindFirst(sFile, faAnyFile, l_SR) = 0 then begin ShowMessage(IntToStr(l_SR.Size)); end; FindClose(l_SR); end;
var i:integer; begin i:=fileopen('文件
var i:integer; fileln:longint; begin i:=fileopen('文件名',fmShareDenyNone); fileln:=fileseek(i,0,2); //取文件长度 fileclose(i);
获得目录下全部文件的大小 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 ?? NO_ERROR then exit; try while ret=NO_ERROR 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;
生成一个filestream对象,读入文件,然后.size就是文件长度了,不用再详细说明了吧
var tFile: File of Byte;
sFile: String;
begin
sFile := 'c:\1212.exe';
AssignFile(tFile,sFile);
Reset(tFile);
ShowMessage(IntToStr(FileSize(tFile)));
CloseFile(tFile);
end;
var
l_SR: TSearchRec;
sFile: String;
begin
if not OpenDialog1.Execute then Exit;
sFile := OpenDialog1.FileName;
if FindFirst(sFile, faAnyFile, l_SR) = 0 then
begin
ShowMessage(IntToStr(l_SR.Size));
end;
FindClose(l_SR);
end;
begin
i:=fileopen('文件
fileln:longint;
begin
i:=fileopen('文件名',fmShareDenyNone);
fileln:=fileseek(i,0,2); //取文件长度
fileclose(i);
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 ?? NO_ERROR then exit; try while ret=NO_ERROR 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;