以下是引用吹水佬在2016-9-21 23:24:08的发言:
之前不是说了吗?VFP是32位编译的,整数的最大值0x7FFFFFFF(2,147,483,647),VFP的数值类型不能处理超过这个限制。
可试试用字符串表示形式来处理超大数值。
上面提到的方法二,文件大小是分高位(32位)低位(32位)存放的,示例只取低位。
试试高低位都取出来看看。
nHSize = CTOBIN(SUBSTR(stFI,29,4), "4RS")
nLSize = CTOBIN(SUBSTR(stFI,33,4), "4RS")
搞定了!非常感谢
Declare Long FindFirstFile In Kernel32 String@, String@
Declare Long FindClose In Kernel32 Long
stFI = Replicate(0h00, 320)
hFile = FindFirstFile("E:\test.rar" , @stFI)
If (hFIle != -1)
nLSize = CToBin(Substr(stFI,33,4), "4RS")
nHSize = CToBin(Substr(stFI,29,4), "4RS")
size_real=((nHSize*4*1024*1024*1024)+IIF(nLSize>=0,nLSize,4*1024*1024*1024+nLSize))/1024/1024
? size_real && 单位 M
FindClose(hFile)
Endif