在C++中使用 Dos 命令时使用 GetLastError

Using GetLastError when using Dos Commands in C++

本文关键字:GetLastError 命令 Dos C++      更新时间:2023-10-16

所以我有一些代码使用Dos命令来尝试重命名文件夹。所以

system("rename C:\Users\me\SecondDir NewDir);

因此,这试图将SecondDir重命名为NewDir。该位置已经有一个名为 NewDir 的文件夹,因此它应该会失败。确实如此。然后我使用 GetLastError 返回错误代码,以确保问题是我期望的。但它只会返回ERROR_NO_MORE_FILES。这不是我应该得到的错误,这是ERROR_ALREADY_EXISTS。我假设这与使用系统命令有关?

编辑:我刚刚检查过,当命令成功时,我什至会返回ERROR_NO_MORE_FILES。

GetLastError 不会返回有意义的值,除非在记录这样做的情况下。这不是其中之一 - 您获得的值无关紧要,并且是为其他人准备的。

要从 C 重命名文件,您应该使用 C 运行时rename函数,而不是使用系统调用重命名实用程序。

GetLastError仅在调用 Win32 函数后立即有意义,该函数被记录为使用 SetLastError 设置线程上次错误。C 等价物是 errno ,这适用于 C 函数。

rename函数在失败时返回 -1 并设置 errno

例如: http://msdn.microsoft.com/en-us/library/zw5t957f(v=VS.80).aspx