This source code file is available for download here: TextFileUtils.bas(~2 KB)

 1: Attribute VB_Name = "TextFileUtils"
 2: Option Explicit
 3: Public Enum FileEncoding
 4:     FileEncodingASCII
 5:     FileEncodingUnicode
 6: End Enum
 7: ' reads all text from a file. sets original file encoding into the encoding parameter
 8: Public Function ReadTextFile(ByVal fileName As String, ByRef encoding As FileEncoding) As String
 9:     Dim FileNo As Integer
10:     FileNo = FreeFile
11:     Open fileName For Binary Access Read As FileNo
12:     Dim prefix As String
13:     prefix = StrConv(InputB(2, FileNo), vbUnicode)
14:     If prefix = Chr(&HFF) + Chr(&HFE) Then
15:         encoding = FileEncodingUnicode
16:         ReadTextFile = InputB(LOF(FileNo) - 2, FileNo)
17:     Else
18:         encoding = FileEncodingASCII
19:         ReadTextFile = prefix & StrConv(InputB(LOF(FileNo) - 2, FileNo), vbUnicode)
20:     End If
21:     Close FileNo
22: End Function
23: ' creates a text file with text as content encoded using the encoding parameter
24: Public Sub WriteTextFile(ByVal fileName As String, ByVal encoding As FileEncoding, ByVal text As String)
25:     Dim FileNo As Integer
26:     FileNo = FreeFile
27:     Select Case encoding
28:     Case FileEncodingASCII
29:         Open fileName For Output As FileNo
30:         Print #FileNo, text;
31:     Case FileEncodingUnicode
32:         ' truncate file
33:         Open fileName For Output As FileNo
34:         Close FileNo
35: 
36:         Open fileName For Binary Access Write As FileNo
37:         Dim signature(1 To 2) As Byte
38:         signature(1) = &HFF
39:         signature(2) = &HFE
40:         Put FileNo, , signature
41:         Dim content() As Byte
42:         content = text
43:         Put FileNo, , content
44:     End Select
45:     Close FileNo
46: End Sub
47: Sub test()
48:     Call WriteTextFile("c:\test1.txt", FileEncodingASCII, "test 1" & vbCrLf & "test 2")
49: 
50:     Dim f As FileEncoding
51:     Dim s As String
52:     s = ReadTextFile("c:\test1.txt", f)
53: 
54:     Call WriteTextFile("c:\test2.txt", FileEncodingUnicode, s)
55: 
56:     Debug.Assert ReadTextFile("c:\test2.txt", f) = s
57: End Sub

Do you have questions, comments, feedback?