/*************************************************************************
* File Name: file_cout.c
* Author: lixiaogang
* Function:统计普通文件个数
* Mail: 2412799512@qq.com
* Created Time: 2017年06月12日 星期一 20时59分43秒
************************************************************************/
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<dirent.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
int filesum = 0;
void sys_err(const char *ptr,int num)
{
perror(ptr);
exit(num);
}
void regFile(const char *path)
{
DIR *dir = opendir(path);
if(NULL == dir)
{
sys_err("opendir",-2);
}
while(1)
{
struct dirent *dire = NULL;
dire = readdir(dir);
if(NULL == dire)
{
break;
}
/* 去掉.和.. */
if((strcmp(dire->d_name,".") == 0) || (strcmp(dire->d_name,"..") == 0))
{
continue;
}
/*普通文件,累加计算*/
if(dire->d_type == DT_REG)
{
++filesum;
continue;
}
/*目录文件,继续向下遍历*/
if(dire->d_type == DT_DIR)
{
char buf[1024];
bzero(buf,sizeof(buf));
sprintf(buf,"%s/%s",path,dire->d_name);
regFile(buf);
}
}
closedir(dir);
}
int main(int argc,char *argv[])
{
/* ./a.out dstfile */
if(argc != 2)
{
printf("Usage: ./a.out dstfil");
exit(-1);
}
const char *path = argv[1];
struct stat st;
int flag = stat(path,&st);
if(flag < 0)
{
sys_err("stat",-1);
}
if(S_ISREG(st.st_mode))
{
++filesum;
return 0;
} else if(S_ISDIR(st.st_mode))
{
regFile(path);
}
printf("filesum = %d\n",filesum);
return 0;
}
相关文章
- Python获取指定目录下的所有文件路径、获取指定目录下所有文件名(但是不包含子目录中文件名)、获取指定目录下所有pdf文件名(但是不包含子目录中pdf文件名)
- 如何在C++ Builder删除一个目录下的所有子目录和所有文件
- 写一个shell,把一个目录下所有的子目录中的文件移至本目录中,并且在文件名的前面加上子目录的文件夹名
- 如何写一个makefile 文件 枚举其子目录下所有makefile 文件并且make 他们 make 的时候可以指定参数
- 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
- python 文件和目录 当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
- Perl里怎么把一个目录下的所有子目录和文件移动到另一个目录去
- Linux下使用Shell脚本删除一个目录下的所有子目录和文件
- Linux下使用Shell脚本删除一个目录下的所有子目录和文件
- linux系统编程----统计一个目录下的普通文件个数