这是我写的一个查找文件或文件夹的函数
BOOL IsFileCreated(char* fileName)
{
HANDLE handle;
WIN32_FIND_DATA file;
handle = FindFirstFile(fileName, &file);
if(handle == INVALID_HANDLE_VALUE){
return 0;
}
else{
return 1;
}
}
在我的专案中我一直用这个函数,没觉得有什么问题,最近专案中有个问题,有个公用的文件夹一直删不掉,删除的时候总显示文件正在被使用,也不是是什么问题,后来团队的成员问我,你的程序有没有访问这个文件夹啊,我说没有啊,后来他们又问,你查找文件时释放句柄了,我一想,好像没,赶紧改了一下,变成如下:
else{
CloseHandle(handle);
}
结果还是不行,我于是又仔细看了一下MSDN,上边关于FindFirstFile的返回值是这样写的,说这个返回值是一个查找文件的句柄(之前我根本不知道查找文件的句柄是何物),在网上一查,查找文件的句柄要用FindClose()来关闭,而在我的认知里,所有HANDLE型的变量都可以使用CloseHandle来关闭的(懂得太少)。
最后改成
else{
FindClose();
return 1;
}
问题终于被解决。
以后再写函数的时候,尤其是那种经常会被用到的基本功能函数,一定要注意这些释放的问题。
记载一下这个问题,希望对大家有所帮助