有个更好用的: GetDiskFreeSpaceEx,这个其实是sysutils里定义的全局的变量。procedure TForm1.Button1Click(Sender: TObject);
  VAR
    FreeBytesAvailableToCaller:  Integer;    
    TotalNumberOfBytes        :  Integer;
    TotalNumberOfFreeBytes    :  Integer;
begin
  IF GetDiskFreeSpaceEx('C:',
                        FreeBytesAvailableToCaller,
                        TotalNumberOfBytes,
                        @TotalNumberOfFreeBytes)
  THEN BEGIN
  ShowMessage(
        'FreeAvailable = ' +
        IntToStr(FreeBytesAvailableToCaller) + 
        #$0D +
        'TotalSpace = '              +
        IntToStr(TotalNumberOfBytes) + 
        #$0D +
        'TotalFree = '               + 
        IntToStr(TotalNumberOfFreeBytes) );
  END
  ELSE ShowMessage('Invalid Disk')
end;

解决方案 »

  1.   

    var
      ClusterSize, SectorSize, FreeClusters, TotalClusters: DWORD;
    begin
      if GetDiskFreeSpace('C:\', ClusterSize, SectorSize, FreeClusters, TotalClusters) then
      begin
        ShowMessage(Format('%d %d %d %d', [ClusterSize, SectorSize, FreeClusters, TotalClusters]));
      end;
    end;
      

  2.   

    这个API可以获得如下信息
    指定磁盘的 每柱面扇区数,每扇区字节数,磁盘剩余扇区数,磁盘总扇区数
    通过获得这些参数可以很方便的得到磁盘总容量,剩余容量
    变量定义可以这样写
    var
      lpRootPathName: PChar;
      lpSectorsPerCluster,
      lpBytesPerSector,
      lpNumberOfFreeClusters,
      lpTotalNumberOfClusters:DWORD;
    然后在代码中调用
      lpRootPathName:='C:\';//或者'C:'也可以
      GetDiskFreeSpace(lpRootPathName,
                       lpSectorsPerCluster,
                       lpBytesPerSector,
                       lpNumberOfFreeClusters,
                       lpTotalNumberOfClusters);
    如果你仅仅想得到磁盘的字节信息可以用以下两个函数
    DiskFree(Drive:Byte):Int64;
    DiskSize(Drive:Byte):Int64;
      

  3.   

    GetDiskFreeSpace函数本身没有剩余字节数的输出,计算一下就可以了借三楼的程序用用..THX
    var
      ClusterSize, SectorSize, FreeClusters, TotalClusters: DWORD;
      FreeSpace:int64;
    begin
      if GetDiskFreeSpace('C:\', ClusterSize, SectorSize, FreeClusters, TotalClusters) then
      begin
        ShowMessage(Format('%d %d %d %d', [ClusterSize, SectorSize, FreeClusters, TotalClusters]));
      end;
      FreeSpace:=ClusterSize*SectorSize*FreeClusters;//计算剩余空间
      Edit1.Text:=inttostr(FreeSpace);//输出
    end;
      

  4.   

    楼上的哥们回答得不错,我就不再说了!
    有关Api的调用,有很多现成的资料,你不妨找一些看看!
    调用上基本上大同小异!
      

  5.   

    借用5楼的程序,不过利用GetDiskFreeSpace函数计算出相关参数后,如果硬盘大的话,需要这样计算出结果:
    freeSpace:=int64(ClusterSize)*int64(SectorSize)*int64(FreeClusters)不妨式一下