Visual c++ 为什么我能';t删除FindFirstFile的第一个文件
Ido删除目录中所有.tmp文件的windows服务。我使用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 =
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目录,以便您仅从目录中删除文件。