Windows API一日一练 58 FindFirstFile和FindNextFile函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Windows API一日一练 58 FindFirstFile和FindNextFile函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3421字,纯文字阅读大概需要5分钟。
内容图文
![Windows API一日一练 58 FindFirstFile和FindNextFile函数](/upload/InfoBanner/zyjiaocheng/978/192db2e801d34567a455edf451fef42d.jpg)
在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFile和FindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。
?
?
函数FindFirstFile、FindNextFile和FindClose声明如下:
?
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileA(
??? __in?LPCSTR lpFileName,
??? __out LPWIN32_FIND_DATAA lpFindFileData
??? );
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileW(
??? __in?LPCWSTR lpFileName,
??? __out LPWIN32_FIND_DATAW lpFindFileData
??? );
#ifdef UNICODE
#define FindFirstFile?FindFirstFileW
#else
#define FindFirstFile?FindFirstFileA
#endif // !UNICODE
?
WINBASEAPI
BOOL
WINAPI
FindNextFileA(
??? __in?HANDLE hFindFile,
??? __out LPWIN32_FIND_DATAA lpFindFileData
??? );
WINBASEAPI
BOOL
WINAPI
FindNextFileW(
??? __in?HANDLE hFindFile,
??? __out LPWIN32_FIND_DATAW lpFindFileData
??? );
#ifdef UNICODE
#define FindNextFile?FindNextFileW
#else
#define FindNextFile?FindNextFileA
#endif // !UNICODE
?
WINBASEAPI
BOOL
WINAPI
FindClose(
??? __inout HANDLE hFindFile
??? );
?
lpFileName是目录名称。一般使用通配符。
lpFindFileData是找到的文件或目录属性。
hFindFile是下一个文件或目录的句柄。
?
调用函数的例子如下:
#001?#pragma once
#002?
#003?//
#004?//遍历一个目录的文件。
#005?//蔡军生?2007/10/25 QQ:9073204 深圳
#006?//
#007?class CFindFile
#008?{
#009?public:
#010?
#011??CFindFile(void)
#012??{
#013 ???????? m_hFind = INVALID_HANDLE_VALUE;
#014 ???????? m_bFound = false;
#015???????? memset(&m_FindFileData,0,sizeof(m_FindFileData));
#016??}
#017?
#018??~CFindFile(void)
#019??{
#020???????? if (m_hFind != INVALID_HANDLE_VALUE)
#021???????? {
#022 ::FindClose(m_hFind);
#023???????? }
#024??}
#025?
#026??//找到第一个文件。
#027??void First(LPCTSTR lpFileName)
#028??{
#029 m_hFind = ::FindFirstFile(lpFileName,&m_FindFileData);
#030???????? if (m_hFind != INVALID_HANDLE_VALUE)
#031???????? {
#032 ?????????????? m_bFound = true;
#033???????? }
#034???????? else
#035???????? {
#036 ?????????????? m_bFound = false;
#037???????? }
#038??}
#039?
#040??//查找一下文件。
#041??void Next(void)
#042??{
#043 m_bFound = FindNextFile(m_hFind, &m_FindFileData) ? true:false;
#044??}
#045?
#046??//是否可以查找一下文件。
#047??bool IsOK(void) const
#048??{
#049???????? return m_bFound;
#050??}
#051?
#052??//返回当前文件的属性。
#053??const WIN32_FIND_DATA& GetCurFile(void)
#054??{
#055???????? return m_FindFileData;
#056??}
#057?
#058?protected:
#059??HANDLE m_hFind; //保存当查找的位置句柄。
#060??bool m_bFound; //当前查找是否成功。
#061??WIN32_FIND_DATA m_FindFileData;//保存当前文件的属性。
#062 ?
#063?};
#064?
?
使用如下:
#001?//查找文件。
#002?????????????? CFindFile findDemo;
#003?????????????? for (findDemo.First(_T(".//*"));
#004??????????????????? findDemo.IsOK();
#005??????????????????? findDemo.Next())
#006?????????????? {
#007??????????????????? //
#008??????????????????? OutputDebugString(findDemo.GetCurFile().cFileName);
#009??????????????????? OutputDebugString(_T("/r/n"));
#010?????????????? }
#011?
?
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net
内容总结
以上是互联网集市为您收集整理的Windows API一日一练 58 FindFirstFile和FindNextFile函数全部内容,希望文章能够帮你解决Windows API一日一练 58 FindFirstFile和FindNextFile函数所遇到的程序开发问题。
如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
来源:【匿名】