当前位置:  开发笔记 > 编程语言 > 正文

为什么readdir之后stat不工作?

如何解决《为什么readdir之后stat不工作?》经验,为你挑选了1个好方法。



1> Gilles 'SO- ..:

经典readdir错误:pDirent->d_name是目录条目的名称,而不是文件的路径.它是"1","4-5.c"等等.所以你的stat调用是在当前目录中寻找具有该名称的文件,而不是在MyDirectory.

检查返回值stat.你会看到它ENOENT- 除了...当前目录中存在的和.当stat出现故障时,stat结构的内容是不确定的.

如果你opendir在一个目录以外的地方调用.,那么要对返回的名称做几乎任何有用的事情,你需要构建一个完整的路径.将传递的路径复制opendir到具有足够空间的缓冲区和文件名,并将每个文件名复制到该缓冲区.概念验证代码(省略错误检查等):

char *directory = "MyDirectory";
size_t directory_length = strlen(directory);
char *path = malloc(directory_length + 1 + NAME_MAX);
strcpy(path, directory);
path[directory_length] = '/';
while ((pDirent = readdir(pDir)) != NULL) {
    strcpy(path + directory_length + 1, pDirent->d_name);
    if (stat(path, &vStat) == -1) {
        perror(path);
        continue;
    }
    …
}

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有