RosettaCodeData/Task/Read-entire-file/Visual-Basic/read-entire-file.vb

38 lines
974 B
VB.net

Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Const CP_UTF8 As Long = 65001
Sub Main()
Dim fn As Integer
Dim i As Long
Dim b() As Byte
Dim s As String
fn = FreeFile()
Open "c:\test.txt" For Binary Access Read As #fn
ReDim b(0 To (LOF(fn) - 1))
Get #fn, 1, b()
If b(0) = &HFF And b(1) = &HFE Then
'UTF-16, little-endian
ReDim b(0 To (LOF(fn) - 3))
Get #fn, 3, b()
s = b()
ElseIf b(0) = &HEF And b(1) = &HBB And b(2) = &HBF Then
'UTF-8
i = MultiByteToWideChar(CP_UTF8, 0&, VarPtr(b(3)), LOF(fn) - 3, StrPtr(s), 0)
s = Space$(i)
i = MultiByteToWideChar(CP_UTF8, 0&, VarPtr(b(3)), LOF(fn) - 3, StrPtr(s), Len(s))
Else
'assume ANSI
s = StrConv(b(), vbUnicode)
End If
Close #fn
Debug.Print s
End Sub