Attribute VB_Name = "TextFileUtils" Option Explicit Public Enum FileEncoding FileEncodingASCII FileEncodingUnicode End Enum ' reads all text from a file. sets original file encoding into the encoding parameter Public Function ReadTextFile(ByVal fileName As String, ByRef encoding As FileEncoding) As String Dim FileNo As Integer FileNo = FreeFile Open fileName For Binary Access Read As FileNo Dim prefix As String prefix = StrConv(InputB(2, FileNo), vbUnicode) If prefix = Chr(&HFF) + Chr(&HFE) Then encoding = FileEncodingUnicode ReadTextFile = InputB(LOF(FileNo) - 2, FileNo) Else encoding = FileEncodingASCII ReadTextFile = prefix & StrConv(InputB(LOF(FileNo) - 2, FileNo), vbUnicode) End If Close FileNo End Function ' creates a text file with text as content encoded using the encoding parameter Public Sub WriteTextFile(ByVal fileName As String, ByVal encoding As FileEncoding, ByVal text As String) Dim FileNo As Integer FileNo = FreeFile Select Case encoding Case FileEncodingASCII Open fileName For Output As FileNo Print #FileNo, text; Case FileEncodingUnicode ' truncate file Open fileName For Output As FileNo Close FileNo Open fileName For Binary Access Write As FileNo Dim signature(1 To 2) As Byte signature(1) = &HFF signature(2) = &HFE Put FileNo, , signature Dim content() As Byte content = text Put FileNo, , content End Select Close FileNo End Sub Sub test() Call WriteTextFile("c:\test1.txt", FileEncodingASCII, "test 1" & vbCrLf & "test 2") Dim f As FileEncoding Dim s As String s = ReadTextFile("c:\test1.txt", f) Call WriteTextFile("c:\test2.txt", FileEncodingUnicode, s) Debug.Assert ReadTextFile("c:\test2.txt", f) = s End Sub