Visual c++ 为什么我能';t删除FindFirstFile的第一个文件

Visual c++ 为什么我能';t删除FindFirstFile的第一个文件,visual-c++,Visual C++,Ido删除目录中所有.tmp文件的windows服务。我使用FindFirstFile函数并执行以下操作: BOOL cleanPath(){ HANDLE hFind = INVALID_HANDLE_VALUE; WIN32_FIND_DATA FindFileData; DWORD dwError; hFind = FindFirstFile(strcat(getDirectoryToClean(), "\\*.tmp"), &FindFileData); if (hFind =

Ido删除目录中所有.tmp文件的windows服务。我使用FindFirstFile函数并执行以下操作:

BOOL cleanPath(){
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA FindFileData;
DWORD dwError;

hFind = FindFirstFile(strcat(getDirectoryToClean(), "\\*.tmp"), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
    logError("Invalid file handle");
    return (-1);
}
else
{
    printf("first file %s\n", FindFileData.cFileName);
    DeleteFile(strcat(strcat(getDirectoryToClean(), "\\"), FindFileData.cFileName));
    // List all the other files in the directory.
    while (FindNextFile(hFind, &FindFileData) != 0)
    {
        logInfo("deleting file");
        printf("  %s\n",FindFileData.cFileName);
        DeleteFile(strcat(strcat(getDirectoryToClean(), "\\"), FindFileData.cFileName));
    }
    dwError = GetLastError();
    FindClose(hFind);

    if (dwError != ERROR_NO_MORE_FILES)
    {
        printf("FindNextFile error. Error is %u.\n", dwError);
        return (-1);
    }
}
}


问题是FindNextFile循环中的文件被删除没有问题,但是第一个DeleteFile不删除我找到的第一个文件。。。我不知道为什么,这是我第一次使用windows c开发,所以我可能错过了一些东西。

FindFirstFile()API返回的第一个文件将是当前目录(.),无法删除,因为它不是空的,因此您会收到此错误


所以你应该检查一下,如果你的文件不是“.”,那么只调用DeleteFile()

文件名是什么?“.”?不,它是foo.tmp,我在目录中有很多.tmp文件,但只有第一个文件没有删除检查DeleteFile和GetLastErrorDeleteFile return 0和GetLastError 2的返回值您可以检查FindFileData.dwFileAttributes!=文件\u属性\u目录,以便您仅从目录中删除文件。