cFileEx 类
基于 VB 原生 Open 语句的高级文件操作类,兼容性好,接口与 cFileIO 保持一致。
说明
cFileEx 使用 VB 原生 Open 语句实现文件操作,相比 cFileIO 具有以下特点:
- 更好的兼容性(不依赖 Win32 API)
- 额外的数据格式支持(Base64、Hex、Binary)
- 接口与
cFileIO保持一致,方便互换使用
特点:
- 一个实例同一时间只能操作一个文件
- 读取内容先进入内部缓冲区,再通过
ReturnXXX方法提取 - 支持 UTF-8、ANSI、UTF-16LE 编码
- 支持 Base64、Hex、Binary 字符串格式
属性
| 属性名 | 类型 | 说明 |
|---|---|---|
IsOpen | Boolean | 文件是否已打开(只读) |
FilePath | String | 当前打开的文件路径(只读) |
LastError | String | 最后一次错误信息(只读) |
FileSize | Currency | 文件大小(字节) |
BufferSize | Long | 当前缓冲区字节数 |
方法
OpenFile
打开文件,返回 Me 支持链式调用。
语法:
vb
Public Function OpenFile(ByVal FilePath As String, Optional ByVal AccessMode As String = "RW") As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
FilePath | String | 要打开的文件路径 |
AccessMode | String | 可选。访问模式:R=只读, W=只写, RW=读写(默认) |
返回值:
- 返回自身实例,支持链式调用
说明:
R模式:文件必须存在W模式:创建或覆盖文件RW模式:文件不存在则创建
示例:
vb
Dim File As New cFileEx
' 只读模式打开
File.OpenFile "C:\\data\\file.txt", "R"
' 读写模式打开(链式调用)
Dim Content As String
Content = File.OpenFile("C:\\data\\file.txt", "RW").ReadData().ReturnText()CloseFile
关闭当前打开的文件。
语法:
vb
Public Sub CloseFile()示例:
vb
File.CloseFileClearBuffer
清空内部缓冲区。
语法:
vb
Public Function ClearBuffer() As cFileEx返回值:
- 返回自身实例,支持链式调用
示例:
vb
File.ClearBuffer()SetBuffer
用外部字节数组填充缓冲区。
语法:
vb
Public Function SetBuffer(Data() As Byte) As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Data | Byte() | 要设置的字节数组 |
返回值:
- 返回自身实例,支持链式调用
示例:
vb
Dim Bytes() As Byte
Bytes = StrConv("Hello", vbFromUnicode)
File.SetBuffer BytesAppendBuffer
追加字节到缓冲区。
语法:
vb
Public Function AppendBuffer(Data() As Byte) As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Data | Byte() | 要追加的字节数组 |
返回值:
- 返回自身实例,支持链式调用
示例:
vb
Dim Part1() As Byte, Part2() As Byte
Part1 = StrConv("Hello ", vbFromUnicode)
Part2 = StrConv("World", vbFromUnicode)
File.SetBuffer(Part1).AppendBuffer(Part2)SetBufferText
用字符串填充缓冲区(默认 UTF-8 编码)。
语法:
vb
Public Function SetBufferText(ByVal Text As String, Optional ByVal CharSet As String = "UTF-8") As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Text | String | 要设置的文本 |
CharSet | String | 可选。编码:UTF-8(默认)、ANSI、UTF-16LE |
返回值:
- 返回自身实例,支持链式调用
示例:
vb
File.SetBufferText "Hello World 你好世界"
File.SetBufferText "Hello World", "ANSI"SetBufferBase64
用 Base64 字符串填充缓冲区。
语法:
vb
Public Function SetBufferBase64(ByVal Base64String As String) As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Base64String | String | Base64 编码的字符串 |
返回值:
- 返回自身实例,支持链式调用
示例:
vb
Dim Base64 As String
Base64 = "SGVsbG8gV29ybGQ="
File.SetBufferBase64 Base64SetBufferHex
用 Hex 字符串填充缓冲区。
语法:
vb
Public Function SetBufferHex(ByVal HexString As String, Optional ByVal Separator As String = " ") As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
HexString | String | Hex 编码的字符串 |
Separator | String | 可选。分隔符,默认为空格 |
返回值:
- 返回自身实例,支持链式调用
说明:
- 自动移除分隔符和空白字符
- 支持空格、制表符、换行等作为分隔符
示例:
vb
' 空格分隔
File.SetBufferHex "48 65 6C 6C 6F"
' 无分隔符
File.SetBufferHex "48656C6C6F", ""
' 自定义分隔符
File.SetBufferHex "48-65-6C-6C-6F", "-"SetBufferBinString
用二进制字符串填充缓冲区。
语法:
vb
Public Function SetBufferBinString(ByVal BinString As String, Optional ByVal Separator As String = " ") As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
BinString | String | 二进制字符串(如 "01001000") |
Separator | String | 可选。分隔符,默认为空格 |
返回值:
- 返回自身实例,支持链式调用
说明:
- 每组 8 位二进制表示一个字节
- 长度不足 8 的倍数时自动前面补 0
示例:
vb
' 空格分隔
File.SetBufferBinString "01001000 01100101 01101100 01101100 01101111"
' 无分隔符
File.SetBufferBinString "0100100001100101", ""ReadData
将文件指定范围读入内部缓冲区。
语法:
vb
Public Function ReadData(Optional ByVal StartPos As Long = -1, Optional ByVal EndPos As Long = -1) As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
StartPos | Long | 可选。起始位置(1-based,-1 表示从开头) |
EndPos | Long | 可选。结束位置(1-based,-1 表示到末尾) |
返回值:
- 返回自身实例,支持链式调用
说明:
- 位置参数为 1-based 字节位置(与 cFileIO 不同)
示例:
vb
' 读取整个文件
File.OpenFile("C:\\data\\file.txt", "R").ReadData()
' 读取第 1-1000 字节
File.ReadData(1, 1000)
' 从第 1001 字节读到末尾
File.ReadData(1001, -1)ReturnText
从缓冲区返回文本。
语法:
vb
Public Function ReturnText(Optional ByVal CharSet As String = "UTF-8") As String参数:
| 参数 | 类型 | 说明 |
|---|---|---|
CharSet | String | 可选。编码:UTF-8(默认)、ANSI、UTF-16LE |
返回值:
- 字符串内容
示例:
vb
Dim Content As String
Content = File.OpenFile("C:\\data\\file.txt", "R") _
.ReadData() _
.ReturnText("UTF-8")ReturnBytes
从缓冲区返回字节数组(副本)。
语法:
vb
Public Function ReturnBytes() As Byte()返回值:
- 字节数组
示例:
vb
Dim Bytes() As Byte
Bytes = File.ReadData().ReturnBytes()ReturnBase64
从缓冲区返回 Base64 编码字符串。
语法:
vb
Public Function ReturnBase64() As String返回值:
- Base64 编码字符串
示例:
vb
Dim Base64 As String
Base64 = File.OpenFile("C:\\data\\image.png", "R").ReadData().ReturnBase64()ReturnHex
从缓冲区返回 Hex 编码字符串。
语法:
vb
Public Function ReturnHex(Optional ByVal Separator As String = " ") As String参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Separator | String | 可选。分隔符,默认为空格 |
返回值:
- Hex 编码字符串
示例:
vb
Dim HexStr As String
HexStr = File.ReadData().ReturnHex(" ")
' 输出: 48 65 6C 6C 6F
HexStr = File.ReadData().ReturnHex("")
' 输出: 48656C6C6FReturnBinString
从缓冲区返回二进制字符串。
语法:
vb
Public Function ReturnBinString(Optional ByVal Separator As String = " ") As String参数:
| 参数 | 类型 | 说明 |
|---|---|---|
Separator | String | 可选。分隔符,默认为空格 |
返回值:
- 二进制字符串(每组 8 位)
示例:
vb
Dim BinStr As String
BinStr = File.ReadData().ReturnBinString(" ")
' 输出: 01001000 01100101 01101100 01101100 01101111SaveData
将内部缓冲区写入文件。
语法:
vb
Public Function SaveData(Optional ByVal FilePath As String, Optional ByVal IsAppend As Boolean = False) As cFileEx参数:
| 参数 | 类型 | 说明 |
|---|---|---|
FilePath | String | 可选。目标路径,未提供则使用 OpenFile 时的路径 |
IsAppend | Boolean | 可选。False=覆盖(默认), True=追加到文件末尾 |
返回值:
- 返回自身实例,支持链式调用
示例:
vb
' 覆盖写入
File.SetBufferText("Hello").SaveData("C:\\data\\output.txt")
' 追加写入
File.SetBufferText("\nNew line").SaveData("C:\\data\\log.txt", True)使用示例
示例 1:基本文件读写
vb
Sub BasicFileExample()
Dim File As New cFileEx
' 写入文件
File.SetBufferText("Hello World 你好世界", "UTF-8") _
.SaveData("C:\\data\\test.txt")
' 读取文件
Dim Content As String
Content = File.OpenFile("C:\\data\\test.txt", "R") _
.ReadData() _
.ReturnText("UTF-8")
Debug.Print Content
File.CloseFile
End Sub示例 2:Hex 数据处理
vb
Sub HexDataExample()
Dim File As New cFileEx
' 从 Hex 字符串创建数据
File.SetBufferHex("48 65 6C 6C 6F 20 57 6F 72 6C 64")
' 以不同格式返回
Debug.Print "文本: " & File.ReturnText() ' Hello World
Debug.Print "Base64: " & File.ReturnBase64() ' SGVsbG8gV29ybGQ=
Debug.Print "Hex(无分隔): " & File.ReturnHex("") ' 48656C6C6F20576F726C64
Debug.Print "二进制: " & File.ReturnBinString(" ") ' 01001000 01100101 ...
End Sub示例 3:二进制数据处理
vb
Sub BinaryDataExample()
Dim File As New cFileEx
' 从二进制字符串创建数据
File.SetBufferBinString("01000001 01000010 01000011") ' ABC
' 保存为文件
File.SaveData "C:\\data\\binary.bin"
' 读取并显示为 Hex
File.OpenFile("C:\\data\\binary.bin", "R").ReadData()
Debug.Print File.ReturnHex() ' 41 42 43
End Sub示例 4:Base64 编解码
vb
Sub Base64Example()
Dim File As New cFileEx
' 读取文件并转为 Base64
File.OpenFile("C:\\data\\image.png", "R").ReadData()
Dim Base64 As String
Base64 = File.ReturnBase64()
' 从 Base64 恢复
File.SetBufferBase64(Base64).SaveData "C:\\data\\image_copy.png"
Debug.Print "Base64 编解码完成"
End Sub示例 5:数据格式转换
vb
Sub FormatConversionExample()
Dim File As New cFileEx
' 原始文本
Dim Text As String
Text = "Hello"
' 文本 -> Hex
File.SetBufferText(Text)
Debug.Print "Hex: " & File.ReturnHex(" ") ' 48 65 6C 6C 6F
' Hex -> 文本
File.SetBufferHex("48 65 6C 6C 6F")
Debug.Print "文本: " & File.ReturnText() ' Hello
' 文本 -> Base64
File.SetBufferText(Text)
Debug.Print "Base64: " & File.ReturnBase64() ' SGVsbG8=
' Base64 -> 文本
File.SetBufferBase64("SGVsbG8=")
Debug.Print "文本: " & File.ReturnText() ' Hello
End SubcFileIO 与 cFileEx 对比
| 特性 | cFileIO | cFileEx |
|---|---|---|
| 实现方式 | Win32 API | VB Open 语句 |
| 大文件支持 | 是(>2GB) | 否(VB 限制) |
| 兼容性 | 需要 Windows | 更好的跨平台兼容 |
| Base64 支持 | 是 | 是 |
| Hex 支持 | 否 | 是 |
| Binary 支持 | 否 | 是 |
| 读取位置 | 0-based | 1-based |
选择建议:
- 需要处理大文件(>2GB)→ 使用
cFileIO - 需要 Hex/Binary 格式支持 → 使用
cFileEx - 一般文件操作 → 两者均可