c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容)
需要用來存儲文件各種信息的結(jié)構(gòu)體:struct_finddata_t 及查找函數(shù):_findfirst、_findnext和_fineclose。
[1] _finddata_t結(jié)構(gòu)體
struct _finddata_t
{
unsignedattrib;
time_ttime_create;
time_ttime_access;
time_ttime_write;
_fsize_tsize;
charname[_MAX_FNAME];
};
unsigned atrrib:
它存儲一個unsigned單元,用于表示文件的屬性。文件屬性是用位表示的,主要有以下一些:_A_ARCH(存檔)、_A_HIDDEN(隱藏)、_A_NORMAL(正常)、_A_RDONLY(只讀)、_A_SUBDIR(文件夾)、_A_SYSTEM(系統(tǒng))。這些都是在中定義的宏,可以直接使用。既然是位表示,那么當(dāng)一個文件有多個屬性時,它往往是通過位或的方式,來得到幾個屬性的綜合。例如只讀+隱藏+系統(tǒng)屬性,應(yīng)該為:_A_HIDDEN| _A_RDONLY | _A_SYSTEM 。
time_t time_create:
這里的time_t是一個變量類型,用來存儲時間的。time_create變量是用來存儲文件的創(chuàng)建時間。
time_t time_access:
文件最后一次被訪問的時間。
time_t time_write:
文件最后一次被修改的時間。
_fsize_t size:
文件的大小,表示文件的字節(jié)數(shù)。
char name[_MAX_FNAME]:
文件的文件名。這里的_MAX_FNAME是一個常量宏,它在頭文件中被定義,表示的是文件名的最大長度。
如何把一個硬盤文件的文件信息“存到”這個結(jié)構(gòu)體所表示的內(nèi)存空間里去呢?這就要靠_findfirst、_findnext和_fineclose三個函數(shù)的搭配使用了。
[2] _findfirst函數(shù)
long _findfirst( char *filespec,struct _finddata_t *fileinfo );
返回值:
如果查找成功的話,將返回一個long型的唯一的查找用的句柄(就是一個唯一編號)。這個句柄將在_findnext函數(shù)中被使用。若失敗,則返回-1。
參數(shù):
filespec:標(biāo)明文件的字符串,支持通配符。比如:*.c,則表示當(dāng)前文件夾下的所有后綴為C的文件。
fileinfo :這里就是用來存放文件信息的結(jié)構(gòu)體的指針。這個結(jié)構(gòu)體必須在調(diào)用此函數(shù)前聲明,不過不用初始化,只要分配了內(nèi)存空間就可以了。函數(shù)成功后,函數(shù)會把找到的文件的信息放入這個結(jié)構(gòu)體中。
[3] _findnext函數(shù)
int _findnext( long handle, struct_finddata_t *fileinfo );
返回值:
若成功返回0,否則返回-1。
參數(shù):
handle:即由_findfirst函數(shù)返回回來的句柄。
fileinfo:文件信息結(jié)構(gòu)體的指針。找到文件后,函數(shù)將該文件信息放入此結(jié)構(gòu)體中。
[4] _findclose函數(shù)
int _findclose( long handle);
返回值:成功返回0,失敗返回-1。
參數(shù):
handle:即由_findfirst函數(shù)返回回來的句柄。
試?yán)?#xff1a;編寫一個查找文件夾下所有文件或文件夾路徑的函數(shù)
#include
#include
#include
#include
usingnamespacestd;
#defineFILE_FLODER 0X0001 //子文件夾
#defineFILE_FILE0X0002//文件
longGetPathArr(conststring &ptStrPath,vector&strPathArr,shorttype )
{
if (ptStrPath.empty() || _access(ptStrPath.c_str(), 0) != 0)//判斷路徑是否存在
return(0);
if (!PathIsDirectory(ptStrPath.c_str()))//判斷是否為文件夾
return(-1);
strPathArr.clear();
_finddata_tfileInfo;
stringstrSearch = ptStrPath + "\\*.*";//搜索文件夾下所有文件
longhandle = 0;
handle =_findfirst(strSearch.c_str(), &fileInfo);
if (-1 ==handle)
return(0);
while (0 ==_findnext(handle, &fileInfo))
{
if (stricmp(fileInfo.name,"..") == 0 || stricmp(fileInfo.name,".") == 0)//如果為上級目錄或當(dāng)前目錄
continue;
if ((fileInfo.attrib&_A_SUBDIR) == _A_SUBDIR)//如果為文件夾
{
if(type == FILE_FLODER)
strPathArr.push_back(ptStrPath + "\\" + fileInfo.name);
}
if ((fileInfo.attrib&_A_ARCH) == _A_ARCH)//如果為文檔
{
if(type == FILE_FILE)
strPathArr.push_back(ptStrPath + "\\" + fileInfo.name);
}
}
_findclose(handle);//關(guān)閉句柄
return(1);
}
總結(jié)
以上是生活随笔為你收集整理的c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: et200sp模块接线手册_西门子PN/
- 下一篇: canal mysql从库_大厂如何基于