1

私は関数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();
4

2 に答える 2

7

GetLastErrorAPI関数呼び出しが失敗を報告した場合にのみ呼び出すことを意図しています。CopyFileとの両方の戻り値を確認してくださいMoveFile。どちらかが返されるFALSE場合、API呼び出しは失敗し、それから、そしてそのときだけ、を呼び出すことが有効ですGetLastError

ドキュメントには、次のように記載されています。

戻り値

関数が成功した場合、戻り値はゼロ以外です。

関数が失敗した場合、戻り値はゼロです。拡張エラー情報を取得するには、を呼び出しますGetLastError

何が起こっているのかはMoveFile成功し、最後のエラー値を変更しません。次に、を呼び出すGetLastErrorと、を呼び出す前に発生したAPI関数への他の呼び出しのエラーコードが返されますMoveFile。次のようなコードを書く必要があります。

if (!MoveFile(szSrcPath,szDestPath))
{
    DWORD err = GetLastError();
    // handle the error
}
于 2013-03-11T12:54:37.550 に答える
7

関数が成功した場合はエラーコードを取得しないでください。値は無効です。代わりに、実際の関数によって返される値(つまり、MoveFile関数の戻り値)を確認し、それがエラーが発生したことを示している場合はエラーが何であったかを確認できます。

于 2013-03-11T12:54:56.300 に答える