首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dirent.h导航文件?

使用dirent.h导航文件?
EN

Stack Overflow用户
提问于 2014-07-31 23:47:24
回答 1查看 7.8K关注 0票数 2

我想知道如何通过C中的代码导航和编辑文件夹和文件,我已经查找了这个库,但是我不确定哪些函数用于遍历目录。在这种情况下,我是否使用了正确的库,如果是这样的话,您能否简要解释一下我需要移动文件夹和更改文件的几个基本功能。另外,我是否必须使用某种指针来跟踪我当前所在的目录,就像使用链接列表一样?我是否需要创建一个二叉树才能得到指针所指向的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-01 02:49:59

最重要的职能是:

opendir(const *) -打开一个目录并返回一个DIR类型的对象

readdir(DIR *) -读取目录的内容并返回类型为dirent (struct)的对象

(DIR *) -关闭一个目录

例如,可以使用以下代码列出目录的内容:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>

char *pathcat(const char *str1, char *str2);

int main()
{
    struct dirent *dp;
    char *fullpath;
    const char *path="C:\\test\\"; // Directory target
    DIR *dir = opendir(path); // Open the directory - dir contains a pointer to manage the dir
    while (dp=readdir(dir)) // if dp is null, there's no more content to read
    {
        fullpath = pathcat(path, dp->d_name);
        printf("%s\n", fullpath);
        free(fullpath);
    }
    closedir(dir); // close the handle (pointer)
    return 0;
}

char *pathcat(const char *str1, char *str2)
{
    char *res;
    size_t strlen1 = strlen(str1);
    size_t strlen2 = strlen(str2);
    int i, j;
    res = malloc((strlen1+strlen2+1)*sizeof *res);
    strcpy(res, str1);
    for (i=strlen1, j=0; ((i<(strlen1+strlen2)) && (j<strlen2)); i++, j++)
        res[i] = str2[j];
    res[strlen1+strlen2] = '\0';
    return res;
}

pathcat函数只需连接2条路径。

此代码只扫描所选目录(而不是其子目录)。您必须创建自己的代码来执行“深度”扫描(递归函数等)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25070751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档