Windows API一日一練(58)FindFirstFile和FindNextFile函數

來源:互聯網
上載者:User
在開發軟體的過程裡,經常需要維護目錄裡的資料。比如在開發銀行的信用卡系統裡,由於每天建立的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 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.