我正在使用CreateDirectory给定路径,其中包含“d:\ temp \ s1 \” 该功能在1000次失败一次,因为我击中相同的概率不小,我认为这不是问题,但如果返回“ERROR_ALREADY_EXISTS”,它仍会创建该目录
e.g。我有这个目录结构
d:\temp\s1\1002 d:\temp\s1\1009 .............. ..............等等30个这样的文件夹, 当getLastError()返回“ERROR_ALREADY_EXISTS”时,我继续循环 并检查下一个随机编号。 我发现这些新目录是无限创造的,以前不存在...这是非常奇怪的任何帮助都是最好的,因为它是非常随机的性质
代码就是那样......
int randNo = 0;
while(1)
{
randNo = rand();
cnt++;
sprintf(tempDirPath,"d:\\temp\\S1\\%d",randNo);
mbstowcs(wBuf,tempDirPath,_MAX_PATH);
bVal = CreateDirectory((LPCTSTR)wBuf,NULL);
retVal = GetLastError();
if( retVal == ERROR_ALREADY_EXISTS)
{
continue;
}
else if (retVal == ERROR_PATH_NOT_FOUND)
{
bVal = CreateFolder(tempDirPath); // i'm creating a folder for further use
}
break;
}
答案 0 :(得分:3)
我想我可以猜到你的问题是什么:即使没有错误,也要检查来自GetLastError
的错误代码。在检查错误代码之前,请务必检查CreateDirectory
返回的值。
这里发生的是CreateDirectory
失败,设置错误代码。然后,下次调用CreateDirectory
时,它会成功,但不会清除错误代码,因为它是上次函数失败时的原因。
不仅CreateDirectory
,所有可能失败的函数都会返回一个表示失败的值,只有这样才能检查GetLastError
以获取错误。