你可能不知道的FindFirstFile

本文介绍了一个用于查找文件或文件夹的函数,并分享了在实际项目中遇到的问题及解决过程。作者通过调整句柄关闭方式从CloseHandle改为FindClose解决了文件夹删除时提示被占用的问题。

    这是我写的一个查找文件或文件夹的函数

    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;

         }

    问题终于被解决。

    以后再写函数的时候,尤其是那种经常会被用到的基本功能函数,一定要注意这些释放的问题。

    记载一下这个问题,希望对大家有所帮助

Creating Windows CreateMDIWindow CreateWindow CreateWindowEx RegisterClass RegisterClassEx UnregisterClass Message Processing BroadcastSystemMessage CallNextHookEx CallWindowProc DefFrameProc DefMDIChildProc DefWindowProc DispatchMessage GetMessage GetMessageExtraInfo GetMessagePos GetMessageTime GetQueueStatus InSendMessage PeekMessage PostMessage PostQuitMessage PostThreadMessage RegisterWindowMessage ReplyMessage SendMessage SendMessageCallback SendMessageTimeout SendNotifyMessage SetMessageExtraInfo SetWindowsHookEx TranslateMessage UnhookWindowsHookEx WaitMessage Window Information AnyPopup ChildWindowFromPoint ChildWindowFromPointEx EnableWindow EnumChildWindows EnumPropsEx EnumThreadWindows EnumWindows FindWindow FindWindowEx GetClassInfoEx GetClassLong GetClassName GetClientRect GetDesktopWindow GetFocus GetForegroundWindow GetNextWindow GetParent GetProp GetTopWindow GetWindow GetWindowLong GetWindowRect GetWindowText GetWindowTextLength IsChild IsIconic IsWindow IsWindowEnabled IsWindowUnicode IsWindowVisible IsZoomed RemoveProp SetActiveWindow SetClassLong SetFocus SetForegroundWindow SetParent SetProp SetWindowLong SetWindowText WindowFromPoint Processes and Threads CreateEvent CreateMutex CreateProcess CreateSemaphore CreateThread DeleteCriticalSection DuplicateHandle EnterCriticalSection ExitProcess ExitThread GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetExitCodeProcess GetExitCodeThread GetPriorityClass GetThreadPriority GetWindowThreadProcessId InitializeCriticalSection InterlockedDecrement InterlockedExchange InterlockedIncrement LeaveCriticalSection OpenEvent OpenMutex OpenProcess OpenSemaphore PulseEvent ReleaseMutex ReleaseSemaphore ResetEvent ResumeThread SetEvent SetPr
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值