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
相关产品推荐
相关产品推荐

