用C語言列出目錄下的文件,在linux下可采用readdir()函數來實現,代碼實現過程為:
打開目錄
循環讀目錄,輸出目錄下文件
關閉目錄指針
參考代碼:
#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);?//關閉目錄
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?);
}
intnRet?=?(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?);?//?關閉當前句柄
}
void?main()
{
printDir("d:/*.*");
}
相關函數說明:
long?_findfirst(?char?*filespec,?struct?_finddata_t?*fileinfo?);//?功能?:?提供與filespec指定入口泛式匹配的第壹個文件.通常後繼用_findnext()函數來完成某泛式下的文件遍歷.
//?頭文件?:?#include?<io.h>
//?參數?:?filespec?-?目標文件規範,可以包含通配符
//fileinfo?-?文件信息buffer
//?返回值?:?成功返回唯壹的搜索句柄
//出錯返回-1,且設置errno為如下值:
//ENOENT?該泛式無法匹配
//EINVAL?無效文件名
int?_findnext(?long?handle,?struct?_finddata_t?*fileinfo?);
//?功能?:?按照前面_findfirst中的泛式規則,查找下壹個符合該泛式的文件,並以此為依據修改fileinfo中的值
//?頭文件?:?#include?<io.h>
//?參數?:?long?handle?-?搜索句柄(通常由緊靠其前的_findfirst()返回)
//fileinfo-?文件信息buffer
//?返回值?:?成功返回0
//出錯返回-1
int?_findclose(?long?handle?);
//?功能?:?關閉搜尋句柄並釋放相應資源
//?頭文件?:?#include?<io.h>
//?參數?:?long?handle?-?搜索句柄(通常由緊靠其前的_findfirst()返回)
//?返回值?:?成功返回0
//出錯返回-1