日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容)

發(fā)布時(shí)間:2024/9/27 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言搜索多层文件夹,c语言 遍历搜索文件夹(获取文件夹中所有内容) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

需要用來(lái)存儲(chǔ)文件各種信息的結(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:

它存儲(chǔ)一個(gè)unsigned單元,用于表示文件的屬性。文件屬性是用位表示的,主要有以下一些:_A_ARCH(存檔)、_A_HIDDEN(隱藏)、_A_NORMAL(正常)、_A_RDONLY(只讀)、_A_SUBDIR(文件夾)、_A_SYSTEM(系統(tǒng))。這些都是在中定義的宏,可以直接使用。既然是位表示,那么當(dāng)一個(gè)文件有多個(gè)屬性時(shí),它往往是通過(guò)位或的方式,來(lái)得到幾個(gè)屬性的綜合。例如只讀+隱藏+系統(tǒng)屬性,應(yīng)該為:_A_HIDDEN| _A_RDONLY | _A_SYSTEM 。

time_t time_create:

這里的time_t是一個(gè)變量類型,用來(lái)存儲(chǔ)時(shí)間的。time_create變量是用來(lái)存儲(chǔ)文件的創(chuàng)建時(shí)間。

time_t time_access:

文件最后一次被訪問(wèn)的時(shí)間。

time_t time_write:

文件最后一次被修改的時(shí)間。

_fsize_t size:

文件的大小,表示文件的字節(jié)數(shù)。

char name[_MAX_FNAME]:

文件的文件名。這里的_MAX_FNAME是一個(gè)常量宏,它在頭文件中被定義,表示的是文件名的最大長(zhǎng)度。

如何把一個(gè)硬盤文件的文件信息“存到”這個(gè)結(jié)構(gòu)體所表示的內(nèi)存空間里去呢?這就要靠_findfirst、_findnext和_fineclose三個(gè)函數(shù)的搭配使用了。

[2] _findfirst函數(shù)

long _findfirst( char *filespec,struct _finddata_t *fileinfo );

返回值:

如果查找成功的話,將返回一個(gè)long型的唯一的查找用的句柄(就是一個(gè)唯一編號(hào))。這個(gè)句柄將在_findnext函數(shù)中被使用。若失敗,則返回-1。

參數(shù):

filespec:標(biāo)明文件的字符串,支持通配符。比如:*.c,則表示當(dāng)前文件夾下的所有后綴為C的文件。

fileinfo :這里就是用來(lái)存放文件信息的結(jié)構(gòu)體的指針。這個(gè)結(jié)構(gòu)體必須在調(diào)用此函數(shù)前聲明,不過(guò)不用初始化,只要分配了內(nèi)存空間就可以了。函數(shù)成功后,函數(shù)會(huì)把找到的文件的信息放入這個(gè)結(jié)構(gòu)體中。

[3] _findnext函數(shù)

int _findnext( long handle, struct_finddata_t *fileinfo );

返回值:

若成功返回0,否則返回-1。

參數(shù):

handle:即由_findfirst函數(shù)返回回來(lái)的句柄。

fileinfo:文件信息結(jié)構(gòu)體的指針。找到文件后,函數(shù)將該文件信息放入此結(jié)構(gòu)體中。

[4] _findclose函數(shù)

int _findclose( long handle);

返回值:成功返回0,失敗返回-1。

參數(shù):

handle:即由_findfirst函數(shù)返回回來(lái)的句柄。

試?yán)?#xff1a;編寫一個(gè)查找文件夾下所有文件或文件夾路徑的函數(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)//如果為上級(jí)目錄或當(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语言 遍历搜索文件夹(获取文件夹中所有内容)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。