7,763
社区成员
发帖
与我相关
我的任务
分享
Sub test楼主()
Dim B() As Byte
s = "d:\楼主的文件.txt" 'ANSI 码 几百兆的文件
t = Timer
Close
F = FreeFile
r = 20 '取第20块记录
k = 30 '30条算一块
ReDim B(1 To 18 * k) As Byte
Open s For Binary As F
Get F, (r - 1) * 18 * k + 1, B
Close F
Debug.Print StrConv(B, 64)
End Sub
Sub tset8g()
Dim b(1024& * 1024) As Byte, bb(1024& * 1024) As Byte
s = "g:\cp090822.GHO" '8G 的Ghost文件 ,超出2G, lof(1) 已经取不到值了
t = Timer
Open s For Binary As 1
Get 1, , b
Get 1, 1024& * 1024 * 1024, bb ' 在1G 处 取1M 字节
Close
Debug.Print Timer - t, "耗时也很短 0 秒 ,VB的计时不是很准 仅参考 "
'Debug.Print b
'Debug.Print bb, "能打印出来和上面不一样说明取到值了"
End Sub
Private Declare Function OpenFile& Lib "kernel32" (ByVal FileName As String, ByVal OFs As Long, ByVal Flags As Long)
Private Declare Function NtReadFile& Lib "ntdll" (ByVal Handle As Long, ByVal Events As Long, ByVal APCRoutine As Long, ByVal APCContext As Long, ByVal IoStatus As Long, ByVal Buffer As Long, ByVal Length As Long, Optional ByVal Number As Long, Optional ByVal Keys As Long)
Private Declare Function NtWriteFile& Lib "ntdll" (ByVal Handle As Long, ByVal Events As Long, ByVal APCRoutine As Long, ByVal APCContext As Long, ByVal IoStatus As Long, ByVal Buffer As Long, ByVal Length As Long, Optional ByVal Number As Long, Optional ByVal Keys As Long)
Private Declare Function CloseHandle& Lib "kernel32" (ByVal Handle As Long)
Public Function ReadFile(ByVal FileName As String, ByRef ByteIn() As Byte) As Boolean
Dim Handle&, Block&(1), Struct&(33)
ReDim ByteIn(FileLen(FileName))
Handle = OpenFile(FileName, VarPtr(Struct(0)), 0)
If NtReadFile(Handle, 0, 0, 0, VarPtr(Block(0)), VarPtr(ByteIn(0)), UBound(ByteIn)) = 0 Then ReadFile = True
CloseHandle Handle
End Function
Public Function WriteFile(ByVal FileName As String, ByRef ByteIn() As Byte) As Boolean
Dim Handle&, Block&(1), Struct&(33)
CloseHandle OpenFile(FileName, VarPtr(Struct(0)), 4096)
Handle = OpenFile(FileName, VarPtr(Struct(0)), 1)
If NtWriteFile(Handle, 0, 0, 0, VarPtr(Block(0)), VarPtr(ByteIn(0)), UBound(ByteIn)) = 0 Then WriteFile = True
CloseHandle Handle
End Function
'使用方法如:
Private Sub Form_Load()
Dim Temp() As Byte
Me.Caption = ReadFile("C:\WINDOWS\win.ini", Temp)
MsgBox StrConv(Temp, vbUnicode)
Erase Temp
Me.Caption = ReadFile("C:\WINDOWS\notepad.exe", Temp)
Me.Caption = WriteFile("C:\notepad.exe", Temp)
End Sub