如何在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

当我运行代码时,会出现如图所示的错误消息:

在此处输入图片说明

错误在如图所示的行中:

在此处输入图片说明

如何让它支持unicode文件名?或者这个功能有什么替代品吗??

布赖恩·M·斯塔福德

有多种方法可以复制具有 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章