`
happmaoo
  • 浏览: 4339633 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFileFindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。
函数FindFirstFileFindNextFileFindClose声明如下:
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileA(
__inLPCSTR lpFileName,
__out LPWIN32_FIND_DATAA lpFindFileData
);
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileW(
__inLPCWSTR lpFileName,
__out LPWIN32_FIND_DATAW lpFindFileData
);
#ifdef UNICODE
#define FindFirstFileFindFirstFileW
#else
#define FindFirstFileFindFirstFileA
#endif // !UNICODE
WINBASEAPI
BOOL
WINAPI
FindNextFileA(
__inHANDLE hFindFile,
__out LPWIN32_FIND_DATAA lpFindFileData
);
WINBASEAPI
BOOL
WINAPI
FindNextFileW(
__inHANDLE hFindFile,
__out LPWIN32_FIND_DATAW lpFindFileData
);
#ifdef UNICODE
#define FindNextFileFindNextFileW
#else
#define FindNextFileFindNextFileA
#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//
#007class CFindFile
#008{
#009public:
#010
#011CFindFile(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//找到第一个文件。
#027void 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//查找一下文件。
#041void Next(void)
#042{
#043 m_bFound = FindNextFile(m_hFind, &m_FindFileData) ? true:false;
#044}
#045
#046//是否可以查找一下文件。
#047bool IsOK(void) const
#048{
#049 return m_bFound;
#050}
#051
#052//返回当前文件的属性。
#053const WIN32_FIND_DATA& GetCurFile(void)
#054{
#055 return m_FindFileData;
#056}
#057
#058protected:
#059HANDLE m_hFind; //保存当查找的位置句柄。
#060bool m_bFound; //当前查找是否成功。
#061WIN32_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



在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFileFindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。
函数FindFirstFileFindNextFileFindClose声明如下:
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileA(
__inLPCSTR lpFileName,
__out LPWIN32_FIND_DATAA lpFindFileData
);
WINBASEAPI
__out
HANDLE
WINAPI
FindFirstFileW(
__inLPCWSTR lpFileName,
__out LPWIN32_FIND_DATAW lpFindFileData
);
#ifdef UNICODE
#define FindFirstFileFindFirstFileW
#else
#define FindFirstFileFindFirstFileA
#endif // !UNICODE
WINBASEAPI
BOOL
WINAPI
FindNextFileA(
__inHANDLE hFindFile,
__out LPWIN32_FIND_DATAA lpFindFileData
);
WINBASEAPI
BOOL
WINAPI
FindNextFileW(
__inHANDLE hFindFile,
__out LPWIN32_FIND_DATAW lpFindFileData
);
#ifdef UNICODE
#define FindNextFileFindNextFileW
#else
#define FindNextFileFindNextFileA
#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//
#007class CFindFile
#008{
#009public:
#010
#011CFindFile(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//找到第一个文件。
#027void 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//查找一下文件。
#041void Next(void)
#042{
#043 m_bFound = FindNextFile(m_hFind, &m_FindFileData) ? true:false;
#044}
#045
#046//是否可以查找一下文件。
#047bool IsOK(void) const
#048{
#049 return m_bFound;
#050}
#051
#052//返回当前文件的属性。
#053const WIN32_FIND_DATA& GetCurFile(void)
#054{
#055 return m_FindFileData;
#056}
#057
#058protected:
#059HANDLE m_hFind; //保存当查找的位置句柄。
#060bool m_bFound; //当前查找是否成功。
#061WIN32_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



分享到:
评论

相关推荐

    精选_使用FindFirstFile和FindNextFile函数实现文件搜索遍历_源码打包

    使用FindFirstFile和FindNextFile函数实现文件搜索遍历

    API函数FindFirstFile和FindnextFile非递归来查找指定的文件

    其实就是找到一个文件夹就加入文件夹队列,找到了指定文件就加入文件队列 当在当前文件夹已经搜索完,就让文件夹队列里的队头文件夹名出队列。直到文件夹队列为空。 结果放在d:\\scan_result.txt,你也可以自己...

    C++ Builder与Windows API经典范例

    1.6 FindFirstFile函数,FindNextFile函数,FindClose函数 1.6.1 范例一 1.6.2 范例二 1. 7 FindCloseChangeNotification函数,FindFirstChangeNotification函数,FindNextChangeNotification函数 1.8 ...

    易语言API取文件目录列表

    易语言API取文件目录列表源码,FindFirstFile,FindNextFile,FindClose

    API之网络函数---整理网络函数及功能

    FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区 FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 ...

    VC API常用函数简单例子大全.doc

    VC API常用函数简单例子大全第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄 4 第二个:SendMessage根据窗口句柄发送一个消息给窗口 4 第三个:GetCursorPos获取鼠标当前位置(屏幕) 6 第四个:...

    API查文件

    取文件列表,取文件名,FindFirstFile,FindNextFile,FindClose

    易语言API搜索文件

    易语言API搜索文件源码,API搜索文件,搜索,lstrcpyn,RtlMoveMemory,FindFirstFile,FindNextFile,FindClose

    FindFirstFile

    FindFirstFile函数功能描述,及改函数的用法,示例代码

    获取目标目录中所有同类型文件名

    获取目标目录中所有同类型文件名的vc小程序,主要涉及到了FindFirstFile和FindNextFile这两个函数的用法

    易语言API取文件列表

    易语言API取文件列表源码,API取文件列表,取文件列表,取文件名,FindFirstFile,FindNextFile,FindClose

    winapi 删除给定目录下的文件及文件夹

    用 windows api 删除给定目录下的文件及文件夹,filesystem 类的 deletefile,removeDirectory,findFirstFile,findNextFile,递归删除

    获取文件夹大小的一个小程序

    获取文件夹大小的一个小程序 使用递归算法,使用WINDOWS的API函数FindFirstFile FindNextFile FindClose

    C++遍历文件夹下的所有文件

    使用C++遍历文件夹下的所有文件,FindFirstFile和FindNextFile的使用方法。

    文件搜索(文件遍历)

    通过FindFirstFile和FindNextFile两个API 经行递归,从而搜索目录下的所有文件(支持通配符,子目录) 该资源为VC完整工程

    WinAPI (Delphi版)

    Creating Windows CreateMDIWindow CreateWindow CreateWindowEx RegisterClass RegisterClassEx UnregisterClass Message Processing BroadcastSystemMessage CallNextHookEx CallWindowProc...

    中文API支持库(1.0-0

    _关闭搜索句柄() 关闭由FindFirstFile函数创建的一个搜索句柄。返回值非零表示成功,零表示失败。会设置GetLastError。 _刷新文件缓冲区() 针对指定的文件句柄,刷新内部文件缓冲区。返回值非零表示成功,零表示失败...

    资源遍历器

    本程序利用findfirstfile() findnextfile() 两个API函数对文件夹进行操作, 能够遍历任何位置的文件。。。

    OneDrive-xFsRedir 类似文件系统操作函数集合

    onedrive_find_open/onedrive_find_next, 类似 FindFirstFile和FindNext函数, onedrive_stat,类似GetFileInformationByHandle等获取文件属性的函数, onedrive_mkdir, 类似CreateDirectory创建目录函数 onedrive_...

Global site tag (gtag.js) - Google Analytics