我正在尝试打开具有Unicode文件名的文件以进行二进制访问,以计算MD5校验和。我正确地将文件名和路径存储在Excel工作表中。
然后代码在Open sPath For Binary Access Read As lngFileNumber
'Run-Time error'52': Bad file name or number
Function GetFileBytes(ByVal sPath As String) As Byte()
' makes byte array from file
Dim lngFileNum As Long, bytRtnVal() As Byte, bTest
lngFileNum = FreeFile
If LenB(Dir(sPath)) Then ''// Does file exist?
Open sPath For Binary Access Read As lngFileNum
'a zero length file content will give error 9 here
ReDim bytRtnVal(0 To LOF(lngFileNum) - 1&) As Byte
Get lngFileNum, , bytRtnVal
Close lngFileNum
Else
Err.Raise 53 'File not found
End If
GetFileBytes = bytRtnVal
Erase bytRtnVal
End Function
有什么建议吗?
答案 0 :(得分:2)
您可以使用StrConv
功能转换文件名,使文件名“可接受”。我尝试了这个修改代码:
Open StrConv(sPath, vbUnicode) For Binary Access Read As #1
... Open
命令使用我的测试文件名abc✓✘.mp3
成功运行。我不能确定它是否可以与你合作,因为你把它们包含在图像中,但它应该没问题。
<强> 相依: 强>
下一行(Redim...
)有一个不同的问题供您调试。 (也许您不能将LOF
用于此类型的文件?或者可能使用FileLen
代替?。
CodeGuru:Opening unicode filenames in XP
MSDN:LOF Function (VBA)