-4

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

例如我有这个目录结构

d:\温度\s1\1002
d:\温度\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;      
}
4

1 回答 1

3

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

这里发生的是CreateDirectory失败,设置错误代码。然后下次你调用CreateDirectory它成功但它不会清除错误代码,让它保持上次函数失败的状态。

不只是for CreateDirectory所有可能失败的函数都会返回一个表示失败的值,只有这样你才能检查GetLastError错误是什么。

于 2013-03-19T09:36:15.880 回答