Skip to content

cFileEx 类

基于 VB 原生 Open 语句的高级文件操作类,兼容性好,接口与 cFileIO 保持一致。

说明

cFileEx 使用 VB 原生 Open 语句实现文件操作,相比 cFileIO 具有以下特点:

  • 更好的兼容性(不依赖 Win32 API)
  • 额外的数据格式支持(Base64、Hex、Binary)
  • 接口与 cFileIO 保持一致,方便互换使用

特点:

  • 一个实例同一时间只能操作一个文件
  • 读取内容先进入内部缓冲区,再通过 ReturnXXX 方法提取
  • 支持 UTF-8、ANSI、UTF-16LE 编码
  • 支持 Base64、Hex、Binary 字符串格式

属性

属性名类型说明
IsOpenBoolean文件是否已打开(只读)
FilePathString当前打开的文件路径(只读)
LastErrorString最后一次错误信息(只读)
FileSizeCurrency文件大小(字节)
BufferSizeLong当前缓冲区字节数

方法

OpenFile

打开文件,返回 Me 支持链式调用。

语法:

vb
Public Function OpenFile(ByVal FilePath As String, Optional ByVal AccessMode As String = "RW") As cFileEx

参数:

参数类型说明
FilePathString要打开的文件路径
AccessModeString可选。访问模式: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.CloseFile

ClearBuffer

清空内部缓冲区。

语法:

vb
Public Function ClearBuffer() As cFileEx

返回值:

  • 返回自身实例,支持链式调用

示例:

vb
File.ClearBuffer()

SetBuffer

用外部字节数组填充缓冲区。

语法:

vb
Public Function SetBuffer(Data() As Byte) As cFileEx

参数:

参数类型说明
DataByte()要设置的字节数组

返回值:

  • 返回自身实例,支持链式调用

示例:

vb
Dim Bytes() As Byte
Bytes = StrConv("Hello", vbFromUnicode)
File.SetBuffer Bytes

AppendBuffer

追加字节到缓冲区。

语法:

vb
Public Function AppendBuffer(Data() As Byte) As cFileEx

参数:

参数类型说明
DataByte()要追加的字节数组

返回值:

  • 返回自身实例,支持链式调用

示例:

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

参数:

参数类型说明
TextString要设置的文本
CharSetString可选。编码:UTF-8(默认)、ANSIUTF-16LE

返回值:

  • 返回自身实例,支持链式调用

示例:

vb
File.SetBufferText "Hello World 你好世界"
File.SetBufferText "Hello World", "ANSI"

SetBufferBase64

用 Base64 字符串填充缓冲区。

语法:

vb
Public Function SetBufferBase64(ByVal Base64String As String) As cFileEx

参数:

参数类型说明
Base64StringStringBase64 编码的字符串

返回值:

  • 返回自身实例,支持链式调用

示例:

vb
Dim Base64 As String
Base64 = "SGVsbG8gV29ybGQ="
File.SetBufferBase64 Base64

SetBufferHex

用 Hex 字符串填充缓冲区。

语法:

vb
Public Function SetBufferHex(ByVal HexString As String, Optional ByVal Separator As String = " ") As cFileEx

参数:

参数类型说明
HexStringStringHex 编码的字符串
SeparatorString可选。分隔符,默认为空格

返回值:

  • 返回自身实例,支持链式调用

说明:

  • 自动移除分隔符和空白字符
  • 支持空格、制表符、换行等作为分隔符

示例:

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

参数:

参数类型说明
BinStringString二进制字符串(如 "01001000")
SeparatorString可选。分隔符,默认为空格

返回值:

  • 返回自身实例,支持链式调用

说明:

  • 每组 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

参数:

参数类型说明
StartPosLong可选。起始位置(1-based,-1 表示从开头)
EndPosLong可选。结束位置(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

参数:

参数类型说明
CharSetString可选。编码:UTF-8(默认)、ANSIUTF-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

参数:

参数类型说明
SeparatorString可选。分隔符,默认为空格

返回值:

  • Hex 编码字符串

示例:

vb
Dim HexStr As String
HexStr = File.ReadData().ReturnHex(" ")
' 输出: 48 65 6C 6C 6F

HexStr = File.ReadData().ReturnHex("")
' 输出: 48656C6C6F

ReturnBinString

从缓冲区返回二进制字符串。

语法:

vb
Public Function ReturnBinString(Optional ByVal Separator As String = " ") As String

参数:

参数类型说明
SeparatorString可选。分隔符,默认为空格

返回值:

  • 二进制字符串(每组 8 位)

示例:

vb
Dim BinStr As String
BinStr = File.ReadData().ReturnBinString(" ")
' 输出: 01001000 01100101 01101100 01101100 01101111

SaveData

将内部缓冲区写入文件。

语法:

vb
Public Function SaveData(Optional ByVal FilePath As String, Optional ByVal IsAppend As Boolean = False) As cFileEx

参数:

参数类型说明
FilePathString可选。目标路径,未提供则使用 OpenFile 时的路径
IsAppendBoolean可选。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 Sub

cFileIO 与 cFileEx 对比

特性cFileIOcFileEx
实现方式Win32 APIVB Open 语句
大文件支持是(>2GB)否(VB 限制)
兼容性需要 Windows更好的跨平台兼容
Base64 支持
Hex 支持
Binary 支持
读取位置0-based1-based

选择建议:

  • 需要处理大文件(>2GB)→ 使用 cFileIO
  • 需要 Hex/Binary 格式支持 → 使用 cFileEx
  • 一般文件操作 → 两者均可

VB6及其LOGO版权为微软公司所有