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

原创 2007年10月25日 21:56:00
在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFileFindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。
 
 
函数FindFirstFileFindNextFileFindClose声明如下:
 
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 
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Windows下使用FindFirstFile和FindNextFile列举目录中的文件

在Windows下编程经常需要列举出某个目录下的所有文件,以便对该目录下的文件进行批量处理,这种情形下,我们可以使用windows api提供的FindFirstFile和FindNextFile。 ...

SHFileOperation函数使用的介绍

今天看到一个关于SHFileOperation函数使用的介绍,发现下面一些有用的资料,都是些之前未仔细了解的方面,这里把他们记录下来,留待以后查阅参考。 fFlags成员标志间的关系 ...

遍历目录 常用FindFirstFile()和FindNextFile()

FindFirstFile   函数功能描述:查找指定目录的第一个文件或目录并返回它的句柄 函数原型 :           HANDLE FindFirstFile( ...

FindFirstFile()函数

FindFirstFile()函数 函数功能描述:查找指定目录的第一个文件或目录并返回它的句柄 函数原型 :           HANDLE FindFirstFile(  ...

c语言 遍历搜索文件夹(获取文件夹中所有内容)

详细介绍使用c语言完成遍历搜索文件夹(获取文件夹中所有内容)的操作。

在c++中可以调用java中的方法,从而实现java与c++的的交互。

在c++中可以调用java中的方法,从而实现java与c++的的交互。     我们在java中调用c++的方法,会传入两个参数,如下图      在c++中调用java都是通过指针来调用,对应...
  • weu135
  • weu135
  • 2015-08-12 22:21
  • 2052

VS2015中配置Pthread

一、安装平台        Win7\8\10   64位           Microsoft Visual St...

FindFirstFile 函数要注意多字节字符问题

本来想搞搞FindFirstFile 函数的,写个代码把

如何使用C\C++实现文件的检索 ?

//要求: //1.列出一个文件夹 //2.列出该文件夹下的子文件夹的名称,文件的名称及大小。 #include #include #include using namespace std; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)