VB读取超过2G的数据文件
VB中,在一些函数、数据类型中与win32api调用时很多都是Long数据类型。
Long数据类型的内存空间范围从-2^31到2^31-1(即:-2147483648到2147483647),超过后计算机会转化Long内存空间,显示出(如:-121321333)这样的数值,正常情况下很难理解这个数值是什么。再就是如何传入超出后的数值给win32api。
测试(如:-121321333)传给超出的api数据类型发现计算机是可以识别的。
解决方法:
数据类型转给api:
'计算Long超过范围后指定数值
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Command1_Click()
Dim FileLen As Currency '储存大于32位文件长度
Dim FileSize As Long '转换long
'假设在2G数据后面增加长度,大小为1
FileLen = (2 ^ 31-1)+1 '( 即:2147483648 ) 超过了long长度
FileLen = FileLen / 10000 'Currency数据类型内存对齐
CopyMemory FileSize, FileLen, 8 'Currency在内存中占8个字节
End Sub
'结果
' FileSize值显示结果为-2147483648api转给数据类型:</