遍历目录linux和windows版
一:linux下遍历目录
void travedir(const char *dir_path,vector<string> &vfilename) //dir_path是传入的目录 ,vcfilename存储扫描到的文件
{
struct dirent *pdirent;
char file_path[1024]={0};
struct stat st;
DIR *d_info=opendir(dir_path);
if(d_info)
{
while((pdirent=readdir(d_info)))
{
if( (strcmp(pdirent->d_name,".")!=0)&&(strcmp(pdirent->d_name,"..")!=0)) //linux系统的"."和".."这类型的文件忽略
{
memset(file_path,0x0,sizeof(file_path));
strcpy(file_path,dir_path);
strcat(file_path,"/");
strcat(file_path,pdirent->d_name);
stat(file_path,&st);
if(S_ISREG(st.st_mode)) //判断是普通文件
{
vfilename.push_back(pdirent->d_name);
}
else if(S_ISDIR(st.st_mode)) //是目录的情况
{
travedir(file_path,vfilename);
}
}
}
}
closedir(d_info);
}
二:windows下的遍历目录
void travedir(const *char *foldername,vector<string> &vfilename)
{
CFileFind tempFile;
char sTempFileFind[MAX_PATH+1]={0};
sprintf(sTempFileFind,"%s/*.*",foldername);
BOOL IsFind = tempFile.FindFile(sTempFileFind);
while(IsFind)
{
IsFind=tempFile.FindNextFile();
if( !tempFile.IsDots()) //无点,是目录
{
char sFileFind[MAX_PATH+1];
strcpy(sFileFind,tempFile.GetFileName());
if(tempFile.IsDirectory())
{
char sTempDir[MAX_PATH+1] = {0};
sprintf(sTempDir, "%s/%s", foldername, sFileFind);
travedir(sTempDir, vFileName);
}
else
{
char sTempFileName[MAX_PATH+1] = {0};
sprintf(sTempFileName, "%s/%s", foldername, sFileFind);
vfilename.push_back(sTempFileName);
}
}
}
tempFile.Close();
}