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 |