请教:关于获取磁盘容量的API函数.GETDISKFREESPACEEX
我想问一下,PB是否支持GETDISKSPACEEX()?
我是这样做的,可是得不到真确的结果,请各位大侠指点一下:
定义了个结构large_integer,成员如下:
long lowpart
long highpart
声名函数:
function long GetDiskFreeSpaceEx (ref string lpRootPathName, large_integer lpFreeBytesAvailableTocaller, large_integer lpTotalNumberOfBytes ,large_integer lpTotalNumberOfFreeBytes) LIBRARY "kernel32.dll" ALIAS for "GetDiskFreeSpaceExA"
写代码
string ls_rootpath
large_integer lst_a,lst_sum,lst_free
long ll_n1
ll_n1=getdiskfreespaceex(ls_rootpath,lst_a,lst_sum,lst_free)
if ll_n1=0 then
messagebox("提示","失败")
return
end if
mle_1.text=string(lst_a.lowpart)+";"+string(lst_a.highpart)+"~r~n"
mle_1.text=mle_1.text+string(lst_sum.lowpart)+";"+string(lst_sum.highpart)+"~r~n"
mle_1.text=mle_1.text+string(lst_free.lowpart)+";"+string(lst_free.highpart)
可是得出的结果都是0
为什么呢?
请高手指点一下
问题点数:40、回复次数:6Top
1 楼balloonman2002()回复于 2005-04-04 09:15:14 得分 10
获取的结构中高、低32位不能直接使用,必须先变换才对,参考:
http://search.csdn.net/Expert/topic/785/785297.xml?temp=.7216608Top
2 楼ribut9225(幽灵庄主)回复于 2005-04-04 10:01:52 得分 0
奇怪了
我照抄他的代码,得出的结果还是0
为什么会这样?
下面是我抄来的代码
string ls_dirname
large_integer lstru_own_space, lstru_total_space, lstru_free_space
long ll_retval
ls_dirname = 'c:'
ll_retval = GetDiskFreeSpaceEx(ls_dirname, lstru_own_space , lstru_total_space , lstru_free_space)
if ll_retval=1 then
st_1.Text = String((lstru_own_space.lowpart/(1024*1024) + lstru_own_space.highpart*(4294967295/(1024*1024)))/1024,'0.00')
st_2.Text = String((lstru_total_space.lowpart/(1024*1024) + lstru_total_space.highpart*(4294967295/(1024*1024)))/1024,'0.00')
st_3.Text = String((lstru_free_space.lowpart/(1024*1024) + lstru_free_space.highpart*(4294967295/(1024*1024)))/1024,'0.00')
end if
large_integer是一个结构,定义如下:
LowPart,unsignedlong //低32位
HighPart,unsignedlong // 高32位
我那里搞错了?
还望指点一下啊
Top
3 楼ribut9225(幽灵庄主)回复于 2005-04-04 11:47:59 得分 0
自己顶Top
4 楼balloonman2002()回复于 2005-04-04 13:59:17 得分 30
这是我自己的代码,可以成功运行,你参考一下吧:
//返回指定驱动器的总空间,单位:M
long TotalBytes[2],FreeBytes[2],BytesAvailableToCaller[2],status
dec{0} ld_total
dec{2} ld_MB
string ls_return
Status = GetDiskFreeSpaceExA(as_disk+":", BytesAvailableToCaller[],TotalBytes[], FreeBytes[])
if status <> 0 then
ld_total= 0.1 * 2^16 * 2^16 *10
ld_total=ld_total * TotalBytes[2]
ld_MB=(ld_total + TotalBytes[1]) / 1024 / 1024
ls_return=string(ld_MB)
end if
return ls_returnTop
5 楼ribut9225(幽灵庄主)回复于 2005-04-04 14:31:27 得分 0
大哥,你的外部函数的声名是如写的?
我参照你的代码,这样写:
function long GetDiskFreeSpaceEx (ref string lpRootPathName, long lpFreeBytesAvailableTocaller[], long lpTotalNumberOfBytes[] ,long lpTotalNumberOfFreeBytes[]) LIBRARY "kernel32.dll" ALIAS for "GetDiskFreeSpaceExA"
可是最后ls_return 的值为0
这是为什么?
Top
6 楼ribut9225(幽灵庄主)回复于 2005-04-04 14:53:57 得分 0
咦?
为什么没有分数?
我已结贴了啊
是不是要明天才能看到?Top




