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值显示结果为-2147483648
api
转给
数据类型:
'直接使用Currency数据类型
Currency = <超过Long的api的数据类型>
在VB中,Currency数据类型可容纳64位数据并最匹配数据内存,可以用来操作64位数据。
至于(如:-121321333)为什么会识别,应该是计算机将数值转化成二进制如:
Long数据类型2^32 -1中:(二进制:)111 1111 1111 1111 1111 1111 1111 1111
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
如果数据增加1后,溢出的结果 -2147483648。(二进制:)1000 0000 0000 0000 0000 0000 0000 0000
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
计算机中用补码来运算加减法,用补码计算-2147483647-1和2147483647+1
file1 = "c:\Myfile10001.txt"
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim fs1, f1
Set fs1 = CreateObject("Scripting.FileSystemObject")
Set f1 = fs1.OpenTextFile(file1
类型转换函数1、 Int(x):求不大于自变量x的最大整数2、 Fix(x):去掉一个浮点数的小数部分,保留其整数部分3、 Hex$(x):把一个十进制数转换为十六进制数4、 Oct$(x):把一个十进制数转换为八进制数5、 Asc(x$):返回字符串x$
读写文件每一个软件开发显目必定涉及的工作。CreateFile函数用于创建对应的文件句柄,WriteFile函数是用来写数据到文件,ReadFile函数是从文件里读取数据出来。CreateFile
该函数用于生成设备(文件)的对应句柄(HANDLE)。//CreateFile函数声明
HANDLE CreateFile(
LPCTSTP lpFileName, //文件名
Dim fso
Set fso = CreateObject(“Scripting.FileSystemObject”)
a1 = fso.GetFile(“D:\锐起无盘4\server1\Virtual Hard Disks\server2012锐起4.vhdx”).Size
MsgBox a1
引用 Microsoft Scripting Runtime
'利用FSO对象获得大文件的大小 需引用 Microsoft Scri
项目当中需要读取采集生成的AVI文件大小,特记录如下:
'获得文件大小Public Function GetFileSizeByName(ByVal sFileName As String) As Double
On Error GoTo ErrHandle Dim FileHandle As Long Dim FileInfo As BY_HANDLE_FILE_...
SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.sydtek.com/
put函数保存数组
这里感谢“VB人生”QQ群,是他们...
返回文件的特定属性是否设置,以integer形式返回
语法:GetAttr(包括文件名的文件路径字符串) and 属性常数
举例:GetAttr("E:\新文件.txt") and v
Function ReadFile(ByVal fPath As String) As String
Dim fN As Integer,lineStrTmp as String
fN = FreeFile
Open fPath For input As #fN
Do Until eof(fN)