用C語言列出目錄下的文件,在linux下可采用readdir()函數(shù)來實現(xiàn),代碼實現(xiàn)過程為:
十年的船營網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整船營建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“船營網(wǎng)站設計”,“船營網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
打開目錄
循環(huán)讀目錄,輸出目錄下文件
關(guān)閉目錄指針
參考代碼:
#include?dirent.h
#include?stdio.h
int?main()
{
DIR?*dirp;?
struct?dirent?*dp;
dirp?=?opendir(".");?//打開目錄指針
while?((dp?=?readdir(dirp))?!=?NULL)?{?//通過目錄指針讀目錄
printf("%s\n",?dp-d_name?);
}??????
(void)?closedir(dirp);?//關(guān)閉目錄
return?0;
}
在windows下,代碼如下:
#include?io.h
#include?stdio.h
void?printDir(?const?char*?path?)
{
struct?_finddata_t?data;
long?hnd?=?_findfirst(?path,?data?);????//?查找文件名與正則表達式chRE的匹配第一個文件
if?(?hnd??0?)
{
perror(?path?);
}
int??nRet?=?(hnd?0?)???-1?:?1;
while?(?nRet?=?0?)
{
if?(?data.attrib?==?_A_SUBDIR?)??//?如果是目錄
printf("???[%s]*\n",?data.name?);
else
printf("???[%s]\n",?data.name?);
nRet?=?_findnext(?hnd,?data?);
}
_findclose(?hnd?);?????//?關(guān)閉當前句柄
}
void?main()
{
printDir("d:/*.*");
}
相關(guān)函數(shù)說明:
long?_findfirst(?char?*filespec,?struct?_finddata_t?*fileinfo?);??
//?功??能?:?提供與filespec指定入口泛式匹配的第一個文件.通常后繼用_findnext()函數(shù)來完成某泛式下的文件遍歷.??
//?頭文件?:?#include?io.h??
//?參??數(shù)?:?filespec?-?目標文件規(guī)范,可以包含通配符??
//??????????fileinfo?-?文件信息buffer??
//?返回值?:?成功返回唯一的搜索句柄??
//??????????出錯返回-1,且設置errno為如下值:??
//??????????ENOENT?該泛式無法匹配??
//??????????EINVAL?無效文件名??
int?_findnext(?long?handle,?struct?_finddata_t?*fileinfo?);??
//?功??能?:?按照前面_findfirst中的泛式規(guī)則,查找下一個符合該泛式的文件,并以此為依據(jù)修改fileinfo中的值??
//?頭文件?:?#include?io.h??
//?參??數(shù)?:?long?handle?-?搜索句柄(通常由緊靠其前的_findfirst()返回)??
//??????????fileinfo????-?文件信息buffer??
//?返回值?:?成功返回0??
//??????????出錯返回-1
int?_findclose(?long?handle?);??
//?功??能?:?關(guān)閉搜尋句柄并釋放相應資源??
//?頭文件?:?#include?io.h??
//?參??數(shù)?:?long?handle?-?搜索句柄(通常由緊靠其前的_findfirst()返回)??
//?返回值?:?成功返回0??
//??????????出錯返回-1
opendir
加上
finddir
這兩個函數(shù) 可以遍歷一個文件夾下面的所有文件節(jié)點
根據(jù)節(jié)點屬性 可以判斷是文件 還是文件夾。
具體用法 自行百度。 很多選項
這是我的TFTP程序中的一個函數(shù),是搜索當前盤符下的所有文件,包括文件的大小,并發(fā)送到客戶端,其中就有查找當前路徑下的文件,你自己挑一下,應該能完成你的需求。
void FileList(sockaddr_in sour_addr,char strStartDir[])
{
char sendbuffer[1024];
sockaddr_in destaddr;
int sourlen = 0;
int ret = 0;
int len = 0;
int flen = 0;
fd_set fdr;
unsigned short blocknum = 0;
FILE *file;
char filename[128];
strcpy(filename,strStartDir+2); /*獲取文件名*/
strcat(filename,"\\*");
destaddr.sin_family = AF_INET;
destaddr.sin_port = sour_addr.sin_port;
destaddr.sin_addr.s_addr = inet_addr(desthost);//
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(filename, FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle");
}
else
{
while(FindNextFile(hFind,FindFileData))
{
printf(FindFileData.cFileName);
printf("\r\n");
memset(sendbuffer,'\0',1024);
len = filldata(blocknum++,FindFileData.cFileName,strlen(FindFileData.cFileName),sendbuffer,sizeof(sendbuffer));
ret = sendto(serverSock,sendbuffer,len,0,(sockaddr *)destaddr,sizeof(destaddr));
}
len = fillover(blocknum,"Over",4,sendbuffer,sizeof(sendbuffer));
ret = sendto(serverSock,sendbuffer,len,0,(sockaddr *)destaddr,sizeof(destaddr));
FindClose(hFind);
return;
}
}
使用dir.h庫的兩個函數(shù)即可:findfirst和findnext。
首先調(diào)用findfirst函數(shù)查找是否有滿足條件的某目錄文件,如果返回值非0則表示找不到返回。
如果findfirst返回值為0,則循環(huán)調(diào)用findnext函數(shù),根據(jù)返回值,如果為0,結(jié)束循環(huán),遍歷結(jié)束。否則循環(huán)調(diào)用findnext即可遍歷,直到返回非0值即可。
當然,這兩個函數(shù)需要定義一個結(jié)構(gòu)體來存儲函數(shù)返回的數(shù)據(jù)。結(jié)構(gòu)體如下:
struct
ffblk
{
char
ff_reserved[21];
/*DOS保留字*/
char
ff_attrib;
/*文件屬性*/
int
ff_ftime;
/*文件時間*/
int
ff_fdate;
/*文件日期*/
long
ff_fsize;
/*文件長度*/
char
ff_name[13];
/*文件名*/
}
將結(jié)構(gòu)體中的ff_name[13]顯示出來即可。
所在函數(shù)庫為dir.h、dos.h
int chdir(char *path) 使指定的目錄path(如:C:\\WPS)變成當前的工作目錄,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname為指定的目錄名和文件名,如C:\\WPS\\TXT
ffblk為指定的保存文件信息的一個結(jié)構(gòu),定義如下: struct?ffblk????????????????????????{????????????????????????????????????char?ff_reserved[21];?/*DOS保留字*/?char?ff_attrib;???????/*文件屬性*/??int??ff_ftime;????????/*文件時間*/??int??ff_fdate;????????/*文件日期*/??long?ff_fsize;????????/*文件長度*/??char?ff_name[13];?????/*文件名*/???}??????attrib為文件屬性,由以下字符代表
┃FA_RDONLY 只讀文件┃FA_LABEL 卷標號┃
┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃
┃FA_SYSTEM 系統(tǒng)文件┃FA_ARCH 檔案 ┃
例:
struct ffblk ff;
findfirst(*.wps,ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴展名ext(.EXE、.COM等)組成一個文件名
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴展名ext(.EXE、.COM等),并分別存入相應的變量中.
int getcurdir(int drive,char *direc) 此函數(shù)返回指定驅(qū)動器的當前工作目錄名稱
drive 指定的驅(qū)動器(0=當前,1=A,2=B,3=C等)
direc 保存指定驅(qū)動器當前工作路徑的變量 成功返回0
char *getcwd(char *buf,iint n) 此函數(shù)取當前工作目錄并存入buf中,直到n個字
節(jié)長為為止.錯誤返回NULL
int getdisk() 取當前正在使用的驅(qū)動器,返回一個整數(shù)(0=A,1=B,2=C等)
int setdisk(int drive) 設置要使用的驅(qū)動器drive(0=A,1=B,2=C等),
返回可使用驅(qū)動器總數(shù)
int mkdir(char *pathname) 建立一個新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個目錄pathname,成功返回0
char *mktemp(char *template) 構(gòu)造一個當前目錄上沒有的文件名并存于template中
char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,
,此函數(shù)使用DOS的PATH變量,未找到文件返回NULL
本文題目:c語言查文件夾目錄的函數(shù) c語言獲取當前目錄下的文件
當前地址:http://jinyejixie.com/article8/dochsop.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、虛擬主機、微信小程序、用戶體驗、響應式網(wǎng)站、外貿(mào)網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)