1、Windows 系统下实现文件夹下的文件扫描
实现代码如下:
#include
#include
#include
#define TestFolderPath "./"
void ScanFolder(const char* folder_path);
int main(int argc,char* argv[])
{
ScanFolder(TestFolderPath);
return 0;
}
/**
文件夹下的文件扫描(Windows system)
@param folder_path 文件夹路径
*/
void ScanFolder(const char* folder_path)
{
_finddata_t file;
long lf;
char tempStr[256];
strcpy(tempStr,folder_path);
strcat(tempStr,"*.*");
if((lf = _findfirst(tempStr, &file))!=-1)
{
while( _findnext(lf,&file) == 0)
{
if(strcmp(file.name,"..")==0)
{
continue;
}
if(file.attrib == _A_SUBDIR)
{
char tTempStr[256];
strcpy(tTempStr,folder_path);
strcat(tTempStr,file.name);
strcat(tTempStr,"/");
//fprintf(stdout,"%s\n",tTempStr);
ScanFolder(tTempStr);
}
else
{
fprintf(stdout,"%s%s\n",folder_path,file.name);
/*unsigned int type = file.attrib;
if(type == _A_NORMAL)
fprintf(stdout,"普通文件\n");
else if(type == _A_RDONLY)
fprintf(stdout,"只读文件\n");
else if(type == _A_HIDDEN)
fprintf(stdout,"隐藏文件\n");
else if(type == _A_SYSTEM)
fprintf(stdout,"系统文件\n");
else
fprintf(stdout,"存档文件\n");
*/
}
}
}
_findclose(lf);
}
2、Linux系统下实现文件夹下文件的扫描
实现代码如下:
/*
$Id:ScanFolder.c,2012/06/10 17:53:29 sine Exp$
*/
#include
#include
#include
#include
#include
#define FolderPath "./"
void scan_folder(const char* folder_path);
int main(int argc,char* argv[])
{
scan_folder(FolderPath);
return 0;
}
/**
文件夹下文件扫描实现
@param folder_path 文件夹的路径
*/
void scan_folder(const char* folder_path)
{
/*
打开一个目录并建立一个目录流,返回一个指向DIR结构的指针,
该指针用于读取目录数据项.
*/
DIR* dp = opendir(folder_path);
if(NULL == dp)
{
fprintf(stderr,"cannot open directory:%s\n",folder_path);
return ;
}
struct dirent *entry;
struct stat statbuf;
chdir(folder_path);//cd目录切换
/*
readdir,返回一个指针,指针指向的结构里保存着目录流中下一个目录项的有关资源。
后续的readdir调用将返回后续的目录项.
*/
while(NULL != (entry = readdir(dp)))
{
lstat(entry->d_name,&statbuf);
if(S_ISDIR(statbuf.st_mode))
{
if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0)
{
continue;
}
char tempStr[256];
strcpy(tempStr,folder_path);
strcat(tempStr,entry->d_name);
strcat(tempStr,"/");
//fprintf(stdout,"before:%s\n",tempStr);
scan_folder(tempStr);
}
else
{
fprintf(stdout,"%s%s\n",folder_path,entry->d_name);
}
}
chdir("..");
closedir(dp);//关闭一个目录流并释放与之关联的资源
}
运行结果:
./Josephus.c
./ScanFolder.c
./Josephus
./readme.txt
./a.out
./test/test.txt
./Makefile
到此,我们就介绍完了两种系统下的文件夹扫描的实现,在这里写下这个,主要是方便以后应用时有个参考。