1. 程式人生 > >使用FindFirstFile,FindNextFile遍歷一個資料夾

使用FindFirstFile,FindNextFile遍歷一個資料夾

FindNextFile是一個函式,可以用來遍歷目錄或檔案時,判斷當前目錄下是否有下一個目錄或檔案。

VB宣告

編輯 Public Declare Function FindNextFile Lib “kernel32” Alias “FindNextFileA” (ByVal hFindFile As Long, lpFindFileData AsWIN32_FIND_DATA) As Long

說明

編輯 根據呼叫FindFirstFile函式時指定的一個檔名查詢下一個檔案

返回值

編輯 Long,如執行成功,返回TRUE。否則為FALSE。

引數表

編輯 引數 型別及說明 hFindFile Long,上一次查詢返回的
檔案控制代碼
lpFindFileData WIN32_FIND_DATA,這個結構用於裝載與找到的檔案有關的資訊。該結構可用於後續的搜尋

註解

編輯 此函式用於遍歷目錄或檔案時,判斷當前目錄下是否有下一個目錄或檔案

VC宣告

編輯 BOOLFindNextFile( HANDLE hFindFile, //searchhandle LPWIN32_FIND_DATA lpFindFileData //databuffer ); 程式例
1 2 3 4 5 6 7 8 9 10 11 12 13 #include<stdio.h>
#include<windows.h> intmain() { WIN32_FIND_DATA p; HANDLE h = FindFirstFile("e:\\test\\*.c",&p); puts(p.cFileName);//相當於printf("%s",p.cFileName) while(FindNextFile(h,&p)) puts(p.cFileName); return0; }

功能說明

編輯

引數說明

編輯 HANDLE hFindFile搜尋的檔案控制代碼 函式執行的時候搜尋的是此控制代碼的下一檔案 LPWIN32_FIND_DATA lpFindFileData 指向一個用於儲存檔案資訊的
結構體

返回值

編輯 非零表示成功,零表示失敗。如不再有與指定條件相符的檔案,會將GetLastError設定成ERROR_NO_MORE_FILES 引用:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 //遍歷資料夾函式 void TraverseFolder(LPCTSTR lpPath) { TCHAR szFind[MAX_PATH] = {_T("\0")}; WIN32_FIND_DATA findFileData; BOOL bRet; _tcscpy_s(szFind, MAX_PATH, lpPath); _tcscat_s(szFind, _T("\\*.*"));    //這裡一定要指明萬用字元,不然不會讀取所有檔案和目錄 HANDLE hFind = ::FindFirstFile(szFind, &findFileData); if (INVALID_HANDLE_VALUE == hFind) { return; } //遍歷資料夾 while (TRUE) { if (findFileData.cFileName[0] != _T('.')) {//不是當前路徑或者父目錄的快捷方式 _tprintf(_T("%s\\%s\n"), lpPath, findFileData.cFileName); if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {//這是一個普通目錄 //設定下一個將要掃描的資料夾路徑 _tcscpy_s(szFind, MAX_PATH, lpPath);    _tcscat_s(szFind, _T("\\"));    _tcscat_s(szFind, findFileData.cFileName); ///_tcscat_s(szNextDir, _T("\\*")); //遍歷該目錄 TraverseFolder(szFind); } } //如果是當前路徑或者父目錄的快捷方式,或者是普通目錄,則尋找下一個目錄或者檔案 bRet = ::FindNextFile(hFind, &findFileData); if (!bRet) {//函式呼叫失敗 //cout << "FindNextFile failed, error code: " //  << GetLastError() << endl; break; } } ::FindClose(hFind); }
        </div>
            </div>