1.打开目录(p106)
#include<sys/types.h>
#include<dirent.h>
DIR *opendir(目录名字);
成功时,返回一个指向目录文件的指针,失败时,返回NULL
读目录
#同上
struct dirent *readdir(DIR *dir);
成功时,返回一个dirent结构体类型的指针,
如果读到末尾或失败,返回NULL。
- dirent结构体如下:
关闭目录
int closedir(DIR *dir);
切换当前目录
#include<unistd.h>
int chdir(要切换的目录);
int fchdir(int fp);
fp:要切换的已打开的文件描述符
创建目录
#include<sys/stat.h>
#include<sys/types.h>
int mkdir("目录名",mode);
删除目录(必须是空目录)
#include<unistd.h>
int rmdir("目录名");
目录指针定位
#include<sys/types.h>
#include<dirent.h>
off_t telldir(DIR *dir);
得到dir所指目录的当前读写位置
成功,返回目录文件的当前位置,失败,返回-1.
void seekdir(DIR *dir, off_t offset);
将dir所指目录的读写指针设置为offset
void rewinddir(DIR *dir);
将指针重置到目录文件开始处
统计家目录下的文件个数,代码如下,其中有一些问题,望大神指点指点。
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
#include<stdlib.h>
int get_file_num(char* root)
{
DIR* dir;
struct dirent* sdir = NULL;
int counter = 0;
char path[2048];
dir = opendir(root);
if(dir == NULL)
{
printf("该路径下无内容!!!\n");
}
sdir = readdir(dir);
while(sdir != NULL)
{
if(strcmp(sdir->d_name,".") || strcmp(sdir->d_name,".."))
{
continue;
}
if(sdir->d_type == DT_DIR)
{
sprintf(path,"%s/%s",root,sdir->d_name);
counter += get_file_num(path);
}
if(sdir->d_type == DT_REG)
{
counter++;
}
}
closedir(dir);
return counter;
}
int main(int argc,char* argv[])
{
if (argc<2)
{
printf("./a.out dir\n");
exit(1);
}
int num = get_file_num(argv[1]);
printf("%s目录的文件个数是:%d\n",argv[1],num);
return 0;
}