使用FindFirstFile,FindNextFile遍歷一個資料夾
阿新 • • 發佈:2018-12-09
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,上一次查詢返回的註解
編輯 此函式用於遍歷目錄或檔案時,判斷當前目錄下是否有下一個目錄或檔案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.html1 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>