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

时间:2012-05-28 16:32:42

标签: c++ file

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

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

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

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

1 个答案:

答案 0 :(得分:3)

GetLastError不会返回有意义的值,除非在文档记录的情况下这样做。这不是其中之一 - 您获得的价值与其他人无关。

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

GetLastError仅在调用Win32函数后立即生效,该函数记录为使用SetLastError设置线程上一个错误。 C等价物是errno,适用于C函数。

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

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