您的位置:首页 > 其它

Windows API一日一练(58)FindFirstFile和FindNextFile函数

2007-12-17 10:26 609 查看
在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFile和FindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。 函数FindFirstFile、FindNextFile和FindClose声明如下: WINBASEAPI__outHANDLEWINAPIFindFirstFileA( __in LPCSTR lpFileName, __out LPWIN32_FIND_DATAA lpFindFileData );WINBASEAPI__outHANDLEWINAPIFindFirstFileW( __in LPCWSTR lpFileName, __out LPWIN32_FIND_DATAW lpFindFileData );#ifdef UNICODE#define FindFirstFile FindFirstFileW#else#define FindFirstFile FindFirstFileA#endif // !UNICODE WINBASEAPIBOOLWINAPIFindNextFileA( __in HANDLE hFindFile, __out LPWIN32_FIND_DATAA lpFindFileData );WINBASEAPIBOOLWINAPIFindNextFileW( __in HANDLE hFindFile, __out LPWIN32_FIND_DATAW lpFindFileData );#ifdef UNICODE#define FindNextFile FindNextFileW#else#define FindNextFile FindNextFileA#endif // !UNICODE WINBASEAPIBOOLWINAPIFindClose( __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

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1844006
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: