最近在做一些檔案查詢相關的工具,所以需要用到遍歷目錄下的檔案,本篇部落格主要介紹如何使用c++遍歷乙個目錄下的所有檔案(包括目錄和檔案)。
_finddata_t是乙個用來儲存檔案各種資訊的結構體,包含在標頭檔案io.h中。具體定義如下:
struct _finddata_t
;
其中各成員變數的含義如下:
介紹了_finddata_t結構體,下面介紹一下三個和它搭配使用的介面。
功能:搜尋與指定的檔名稱匹配的第乙個例項。
long
_findfirst
(char
* filespec,
struct _finddata_t* fileinfo)
;引數:
filespec:標明檔案的字串,可支援萬用字元。
fileinfo:用來存放檔案資訊的結構體的指標。
返回值:
查詢成功,返回乙個long型的唯一的查詢用的控制代碼。失敗返回-
1。
注意:
int
_findnext
(long handle,
struct _finddata_t* fileinfo)
;引數:
handle:控制代碼,由_findfirst函式返回的控制代碼。
fileinfo:用來存放檔案資訊的結構體指標。
返回值:
成功返回0,失敗返回-
1。
功能:結束查詢。
int
_findclose
(long handle)
;引數:
handle:_findfirst返回的控制代碼。
返回值:
成功返回0,失敗返回-
1。
先來看一下要遍歷的目錄。
);// 結束查詢
_findclose
(handle);}
void
listdirtest()
cout << endl;
// 列印目錄下的目錄檔案
從上述結果,我們注意到,該程式只能遍歷乙個目錄下的所有檔案,而不會去遍歷目錄下的目錄檔案中的檔案,下面我們來完善一下程式,可以遍歷乙個目錄下的所有檔案,包括檔案下的目錄檔案中的檔案。
#include
#include
#include
#include
#include
using std::cout;
using std::endl;
void
listdir
(const std::string& path, std::vector<:string>
& subfiles,
std::vector<:string>
& subdirs)do}
else
}while
(_findnext
(handle,
&file)==0
);// 結束查詢
_findclose
(handle);}
void
listdirtest()
// 列印目錄下的檔案
cout <<
"files: "
<< subfiles.
size()
<< endl;
for(size_t i =
0; i < subfiles.
size()
;++i)
cout << endl;
// 列印目錄下的目錄檔案
遍歷目錄下的所有檔案
下面這段 演示了查詢乙個目錄下所有檔案的過程,將檔名存放在result.txt檔案中。void cmydlg oncollectallfilename myfile.writestring lpctstr myfinder.getfilepath t n mylist.removehead myfi...
boost遞迴遍歷獲得特定目錄下的所有資料夾名
在windows作業系統下可以使用微軟的檔案查詢功能 findfirst 或 findfirsti64 和 findnext 或者 findnexti64 配合 finddata t 或者 finddatai64 t 但是無法脫離windows使用。如果需要使用寬字元的查詢,可以在下劃線後加入w 如...
shell遍歷目錄下所有檔案
filelist ls home work file for file in filelist do echo file done 一定要切記filelist 後邊的那個引號不是單引號,而是tab鍵上邊的那個鍵,或者說是1左邊的那個鍵。否則的話不起作用。唉,自己在上吃虧了好長時間。汗!如果ls後面的...