获得磁盘剩余空间:GetDiskFreeSpaceEx

WIN95OSR2)以后的版本包括WIN98都支持将硬盘格式化为FAT32格式,这种格式支持硬盘的分区可大于2G,原来的FAT16格式无法支持大于2G的硬盘分区,对于FAT32格式的硬盘如果其容量大于2G,那么原来的检测磁盘容量的API函数GetFreeDiskSpace将无法返回正确的容量大小,为此,微软公司新增加了一个检测磁盘容量的API函数GetDiskFreeSpaceEx,此函数对容量大于2GFAT32格式的硬盘能返回正确的数据。本文给出一个例子,介绍如何使用此新API函数,本例子也可供大家在编写安装程序时检测磁盘空间作为参考。  

 首先介绍一下API函数GetDiskFreeSpaceEx的参数,它的原型如下:     GetDiskFreeSpaceEx(     LPCTSTR   lpDirectoryName,   //   指明哪个磁盘       PULARGE_INTEGER   lpFreeBytesAvailableToCaller,   //   返回当前用户可使用的自由空间,这里需要说明的是某些操作系统可能对每个用户有一个可使用的磁盘空间的限制,对普通的PC用户来说此参数没有意义。     PULARGE_INTEGER   lpTotalNumberOfBytes,         //磁盘总容量     PULARGE_INTEGER   lpTotalNumberOfFreeBytes   //剩余的自由空间,对普通PC用户来说它和lpFreeBytesAvailableToCaller相同。   );          

 

GetDiskFreeSpaceGetDiskFreeSpaceEx之间存在差别:  

        GetDiskFreeSpaceEx不仅返回指定盘符中真正的剩余空间,还能够返回调用者剩余的配额空间,编程的时候有用的往往是后者。当然,如果不在NTFS   5.0下或者没有设置配额,这两个值应该是相同的。        GetDiskFreeSpaceEx还考虑到了磁盘配额系统的发展需求,比如将来增加对每个目录而不仅仅是每个盘符的配额空间的支持。             GetDiskFreeSpaceEx还增加了对UNC路径名的支持,并且即使盘符的容量大于 2G FAT   32NTFS系统下)也能够返回正确的结果。    

附录:GetDiskFreeSpace 的用法(delphi)

WinAPI: GetDiskFreeSpace - 获取磁盘组织与容量信息

//声明:

GetDiskFreeSpace(

  lpRootPathName: PChar;             {磁盘根路径}

  var lpSectorsPerCluster: DWORD;    {一个簇内的扇区数}

  var lpBytesPerSector: DWORD;       {一个扇区内的字节数}

  var lpNumberOfFreeClusters: DWORD; {剩余簇数}

  var lpTotalNumberOfClusters: DWORD {总簇数}

): BOOL;

 

//备注:该函数只能得到小于 2G 的磁盘空间。

     如果要得到大于 2G 的磁盘空间应该用函数GetDiskFreeSpaceEx.

 

//举例:

procedure TForm1.FormCreate(Sender: TObject);

var

  d1,d2,d3,d4: DWORD;

begin

  GetDiskFreeSpace('C:',d1,d2,d3,d4);

 

  {以下只是显示}

  Memo1.Clear;

  with Memo1.Lines do

  begin

    Add(Format('一个簇内的扇区数: %d',[d1]));

    Add(Format('一个扇区内的字节数: %d',[d2]));

    Add(Format('剩余簇数: %d',[d3]));

    Add(Format('总簇数: %d',[d4]));

    Add(Format('剩余空间: %f GB',[d3/1024/1024/1024*d2*d1]));

    Add(Format('总空间: %f GB',[d4/1024/1024/1024*d2*d1]));

  end;

end;

//效果图:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值