-4

「d:\temp\s1\」を保持するパスを指定してCreateDirectoryを使用していますが、同じ番号をヒットする可能性が低いため、関数は1000回に1回失敗しますが、問題ではないと思いますが、「ERROR_ALREADY_EXISTS」を返す場合はまだそのディレクトリを作成します

たとえば、私はこのディレクトリ構造を持っています

d:\temp\s1\1002
d:\temp\s1\1009
…………
…………

getLastError() が「ERROR_ALREADY_EXISTS」を返すと、30 個のそのようなフォルダーがあるとします。ループを続行し、次のランダム番号をチェックします。私が見つけたのは、以前は存在しなかった新しいディレクトリが無限に作成されていることです...非常に奇妙なことですが、それは非常にランダムな性質であるため、どんな助けも最善です

コードはそのようなものです...

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と成功しますが、エラーコードはクリアされず、関数が最後に失敗したときのままになります。

だけでなくCreateDirectory、失敗する可能性のあるすべての関数は、失敗したことを示す値を返します。その場合にのみGetLastError、エラーの内容を確認できます。

于 2013-03-19T09:36:15.880 に答える