目录文件操作

41 篇文章 0 订阅

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;/*文件个数初始化为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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值