文件的读取vb6 方法一

阅读更多
参考 https://bbs.csdn.net/topics/340173969/ 中的a1875566250的回复

Option Explicit

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)

Private 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 File2String(ByVal FileName As String) As String
    Dim sbyte() As Byte
    If (ReadFile(FileName, sbyte)) Then
        File2String = StrConv(sbyte, vbUnicode)
    Else
        File2String = ""
    End If
    Erase sbyte
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

你可能感兴趣的:(VB)