CreateDirectory windows API issue

CreateDirectory windows API issue

本文关键字:issue API windows CreateDirectory      更新时间:2023-10-16

我正在使用CreateDirectory给定路径,其中包含"d:temps1"该函数在1000次中失败一次,因为我命中相同no的概率较小,我认为这不是问题,但如果返回"ERROR_ALREADY_EXISTS",它仍然会创建该目录

。我有这个目录结构

<>之前d: temp s1 1002d: 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;      
}

我想我能猜到你的问题是什么:你检查GetLastError的错误代码,即使没有错误。检查错误码前,始终检查CreateDirectory返回的值

这里发生的是CreateDirectory失败,设置错误代码。然后下次调用CreateDirectory时,它成功了,但它不清除错误代码,使其与上次函数失败时一样。

这不仅适用于CreateDirectory所有函数可能失败,将返回一个值表明它失败了,只有这样你才能检查GetLastError得到错误是什么