把文件读入XXStream(TMemorystream)中,再用XXStream.Size取出长度

解决方案 »

  1.   

    楼上的办法可行,
    生成一个filestream对象,读入文件,然后.size就是文件长度了,不用再详细说明了吧
      

  2.   

    Delphi中有一个函数FindFirst,自己看看帮助。
      

  3.   

    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;
      

  4.   

    gz!上面的方法在文件较小时可行。如果文较较大,比如1G,运行速度就会相当的慢,熟悉 API 的兄弟,是不是有较简单的Windows函数可以快速返回文件长度呢?
      

  5.   

    to:genphone_ru(票票) File of Byte的Reset默认是以100byte为一个单元,所以用FileSize返回的并不是OS默认的文件大小。
      

  6.   

    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;
      

  7.   

    var i:integer;
    begin
    i:=fileopen('文件
      

  8.   

    var i:integer;
    fileln:longint;
    begin
    i:=fileopen('文件名',fmShareDenyNone);
    fileln:=fileseek(i,0,2);         //取文件长度
    fileclose(i);
      

  9.   

    获得目录下全部文件的大小
     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;