unicode - 如何在 VB6 中读取/写入具有 Unicode 文件名的二进制文件
问题描述
我有这个代码:
Function cpyBIN(cpFilename As String)
Dim litefile() As Byte
Dim FN As Integer
Dim xlof As Long
FN = 1
Open cpFilename For Binary As FN
xlof = LOF(FN)
ReDim litefile(xlof)
Get FN, , litefile
Open cpFilename & "Backup" For
Binary As #2
Put #2, , litefile
Close #2
Close FN
End Function
我以这样的形式使用它:
Private Sub cmdBackup_Click()
Dim strComputer, objWMIService, colFiles, objfile
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colFiles = objWMIService.ExecQuery("Select * from CIM_Datafile where Drive='D:' and path='\\contoh\\'")
For Each objfile In colFiles
cpyBIN (objfile.Name)
Next
End Sub
在contoh文件夹中有 2 个示例文件:
- 名称文件.exe
- 名称文件♣♣♠.exe
当我运行代码时,出现如图所示的错误消息:
错误在如图所示的行中:
如何使其支持 unicode 文件名?或者这个功能有什么替代品吗?
解决方案
有几种方法可以制作具有 Unicode 文件名的文件的副本。第一种方法是使用Windows API:
Declare Function CopyFileW Lib "kernel32.dll" (ByVal lpExistingFileName As Long, _
ByVal lpNewFileName As Long, Optional ByVal bFailIfExists As Long) As Long
For Each objfile In colFiles
CopyFileW StrPtr(objfile.Name), StrPtr(objfile.Name & ".Backup")
Next
第二种方法是使用FileSystemObject:
Dim fso As FileSystemObject
Set fso = New FileSystemObject
For Each objfile In colFiles
fso.CopyFile objfile.Name, objfile.Name & ".Backup", True
Next
第三种方法是使用ADO Stream:
Dim s As ADODB.Stream
Set s = New ADODB.Stream
s.Open
s.Type = adTypeBinary
For Each objFile In colFiles
s.LoadFromFile objFile.Name
s.SaveToFile objFile.Name & ".Backup", adSaveCreateOverWrite
Next
s.Close
如果你想读取数据,我会使用 ADO Stream:
Dim s As ADODB.Stream
Set s = New ADODB.Stream
s.Open
s.Type = adTypeBinary
For Each objFile In colFiles
s.LoadFromFile objFile.Name
data = s.Read()
'use the data somehow
Next
s.Close
推荐阅读
- .net - 访问从不同线程访问的控件时如何处理无效的跨线程操作?
- ios - 在 IOS 上打开 Wiki 页面
- c# - 如何在流布局面板中搜索控件?
- mongodb - 在 docker-compose 自定义网络上连接到 MongoDB 数据库
- hive - 是否可以将数据从任何远程系统加载到 hive/hdfs?
- android - 如何在虚拟框上的 LineageOS 中将触摸屏变为光标
- javascript - Discord js 找不到发送错误消息的通道
- javascript - 如何使用jquery在字符串中添加变量
- sql - oracle OracleSchedulerXE中以下服务的目的是什么
- rundeck - 通过 Rundeck API 获取作业的最新执行