CreateDirectory windows API问题

时间:2013-03-19 09:09:14

标签: c++ windows

我正在使用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;      
}

1 个答案:

答案 0 :(得分:3)

我想我可以猜到你的问题是什么:即使没有错误,也要检查来自GetLastError的错误代码。在检查错误代码之前,请务必检查CreateDirectory返回的值。

这里发生的是CreateDirectory失败,设置错误代码。然后,下次调用CreateDirectory时,它会成功,但不会清除错误代码,因为它是上次函数失败时的原因。

不仅CreateDirectory所有可能失败的函数都会返回一个表示失败的值,只有这样才能检查GetLastError以获取错误。