【问题标题】:vba excel open unicode file name for binary access readvba excel打开unicode文件名进行二进制访问读取
【发布时间】:2018-06-01 01:49:19
【问题描述】:

我正在尝试打开一个具有 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

有什么建议吗?

【问题讨论】:

    标签: excel unicode-string vba


    【解决方案1】:

    您可以使用StrConv 函数将文件名转换为“可接受”。我用这个修改试过你的代码:

    Open StrConv(sPath, vbUnicode) For Binary Access Read As #1
    

    ...Open 命令以我的测试文件名abc✓✘.mp3 成功运行。我不能确定它是否适用于您的图像,因为您将它们作为 图像 包含在内,但应该没问题。

    不相关:
    下一行 (Redim...) 有一个不同的问题供您调试。 (也许您不能将LOF 用于这种类型的文件?或者改用FileLen?。)


    更多信息:

    【讨论】:

    • 我试过这个下一行失败 LOF(lngFileNum) 返回 0 并且 FileLen(lngFileNum) 返回运行时错误 '53' 找不到文件
    • @MarkS - 好吧,我提到你有更多问题,但这个问题所涉及的问题已经解决。但是,在您发布新问题之前:您是否看到提供的所有链接?您需要自己阅读这些功能。至少其中一个被错误地使用了,快速浏览一下文档就会很明显。
    • @MarkS 如果这个问题 (The code then fails at ... with 'Run-Time error'52': Bad file name or number) 中的问题得到解决,别忘了 ✓ Accept 一个有帮助的答案解决您的问题...您将获得 +2 声誉,而答案的作者获得 +15 声誉。欢迎您提出有关下一个问题的详细信息的新问题。 (相关提示请参见“minimal reproducible example”和“How to Ask”。)
    • @MarkS - 不要忘记 ✓ Accept 一个有助于解决您问题的答案...您将获得 +2 声誉,答案的作者得到 +15 代表。当您的声望达到 15 时,您可以 ▲ Upvote 任何有用的答案,这也将奖励作者加上您的反馈投票的形式有利于Stack Overflow 整个社区!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多