您的位置:首页 > 运维架构 > Linux

Linux下遍历文件夹功能实现代码——20110802

2011-08-02 16:00 197 查看
#include <stdio.h>
#include <malloc.h>
#include <iostream>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <time.h>
#include <dirent.h>
#include <sys/stat.h>
#include <errno.h>
#include <sys/types.h>

long ndir, nfile;
int isdir(char *);
void search(char *, char *);

//判断是否为路径
int  isdir(char *name)
{
struct stat stbuf;
if(lstat(name, &stbuf) < 0)
{
//printf( "stat:%s:%s\n",name, strerror(errno));
return 0;
}
else
return (S_ISDIR(stbuf.st_mode))? 1 : 0;
}

//遍历文件夹判断是否为视频文件,为视频文件则从视频文件中获取数据
void search(char * path, char * fname)
{
DIR *dirp;
struct dirent *dir;
char buffer[BUFSIZ];
char filepath[256] = "";
if(isdir(path))
{
if((dirp = opendir(path)) == NULL)
{
printf( "Error opening dir %s", path);
printf( ":%s\n",strerror(errno));
return;
}
}
else
return;
while((dir = readdir(dirp))!= NULL)
{
if(!strcmp(dir-> d_name,".") || !strcmp(dir-> d_name,".."))
{
//nothing
}
else
{
bzero(buffer, sizeof(buffer));
strncat(buffer, path, sizeof(buffer));
if(path[strlen(path)- 1]   == '/')
{
//noting
}
else
strncat(buffer, "/", sizeof(buffer));
strncat(buffer, dir->d_name, sizeof(buffer));
if(isdir(buffer))
{
ndir++;
search(buffer, fname);
}
else
{
nfile++;
string filename(dir->d_name);
int nResult1=filename.find(".mp4");
int nResult2=filename.find(".264");
if(nResult1>0 || nResult2>0)
{
printf("found:%s/%s\n",path,dir->d_name);
sprintf(filepath,"%s/%s",path,dir->d_name);
//从视频文件中
//Demo_GetStream_VideoFile(filepath);
}
}
}
}
closedir(dirp);
}


使用方法:

直接调用search(char * path, char * fname)函数即可,注:fname暂时不起作用,调用的时候可以为空,该函数的作用是寻找path目录(包括子目录)下后缀名为“.mp4”或者“.264”的文件,并将文件全路径打印到屏幕。

测试通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: