You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6中MoveFile函数报错相关咨询:错误码与平台差异

VB6中MoveFile API相关问题解答

1. 目标路径存在同名文件时的错误码

当目标路径已存在同名文件导致MoveFile执行失败时,系统返回的错误码是ERROR_ALREADY_EXISTS,对应数值为183。

2. 特定场景的专属错误码

除了目标文件已存在的情况,MoveFile在以下场景会返回专属错误码,可用于精准异常处理:

  • 源文件不存在:ERROR_FILE_NOT_FOUND(数值2)
  • 目标路径不存在(比如父文件夹未创建):ERROR_PATH_NOT_FOUND(数值3)
  • 无操作权限(比如读写被拒绝):ERROR_ACCESS_DENIED(数值5)
  • 参数无效(比如路径格式错误):ERROR_INVALID_PARAMETER(数值87)
  • 源文件正被占用:ERROR_SHARING_VIOLATION(数值32)

3. 错误码的平台差异问题

MoveFile是Windows系统提供的API函数,返回的错误码由Windows内核定义,和VB6这个开发平台无关。只要是在Windows系统下调用,核心错误码的定义是统一兼容的(从早期Windows XP到最新Win11都保持一致),不会因为开发环境变化而改变。

优化你的错误处理逻辑

你当前的代码只判断了成功/失败,无法区分具体错误原因,可以通过调用GetLastError API获取具体错误码,优化后的代码示例如下:

首先在模块中声明API:

Private Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long

然后修改业务逻辑:

Dim lngResult As Long
Dim lngErrCode As Long

lngResult = MoveFile(SrcPath, TargetPath)
If lngResult = 0 Then
    lngErrCode = GetLastError()
    Select Case lngErrCode
        Case 2
            Spread.SetText("错误:源文件不存在")
        Case 3
            Spread.SetText("错误:目标路径不存在")
        Case 5
            Spread.SetText("错误:无操作权限")
        Case 32
            Spread.SetText("错误:源文件正被占用")
        Case 183
            Spread.SetText("错误:目标文件已存在")
        Case Else
            Spread.SetText("未知错误,错误码:" & CStr(lngErrCode))
    End Select
Else
    Spread.SetText("上传成功")
End If

内容的提问来源于stack exchange,提问作者tory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:37:15