2 回答
TA贡献1802条经验 获得超5个赞
经典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;
}
…
}
- 2 回答
- 0 关注
- 800 浏览
添加回答
举报