MoveFile()工作,但返回错误2(找不到文件)

时间:2013-03-11 12:50:42

标签: c++ winapi movefileex

我正在使用函数Movefile()(在C中)。我可以看到文件从源文件夹移动到目标(意味着MoveFile成功)但是当我执行GetLastError()时,我得到错误号。 2(ERROR_FILE_NOT_FOUND)。

可能是什么问题?

代码是:

_snprintf(szSrcPath, MAX_PATH, "%s/%s/%s.jpg", NPath, imagePathFromAdmin, username);
_snprintf(szDestPath, MAX_PATH, "%s/Images/Storage/%s/%d/%s.jpg", NPath, domain, sub_folder, username);
strcpy(imagePathStorgae,szDestPath);
MoveFile(szSrcPath,szDestPath);
err=GetLastError();

2 个答案:

答案 0 :(得分:7)

如果API函数调用报告失败,您只需要调用GetLastError。检查CopyFileMoveFile的返回值。如果其中一个返回FALSE,那么API调用失败,然后,只有这样,调用GetLastError才有效。

documentation声明如下:

  

返回值

     

如果函数成功,则返回值为非零值。

     

如果函数失败,则返回值为零。要获得扩展错误   信息,请致电GetLastError

正在发生的事情是MoveFile成功并且不会修改上一个错误值。然后当你调用GetLastError时,它会返回一个错误代码,用于调用API函数,这是在你调用MoveFile之前发生的。您应该编写如下代码:

if (!MoveFile(szSrcPath,szDestPath))
{
    DWORD err = GetLastError();
    // handle the error
}

答案 1 :(得分:7)

如果函数成功,获取错误代码,该值无效。而是检查实际函数返回的值(即MoveFile函数返回值),如果这表明发生了错误,那么然后就可以检查错误是什么。

相关问题