【发布时间】:2021-03-01 09:43:36
【问题描述】:
在这段代码中,我打印了基本目录中的所有文件。但我想更具体一点,只打印我想要的文件。我该怎么做?
int specificSelection(char *basePath, char *specificFile){
struct dirent *dp;
DIR *dir;
int count=0;
if ( NULL != ( dir = opendir ( basePath))) {
while ( NULL != ( dp = readdir(dir))) {
if (strcmp ( dp->d_name, ".") != 0 && strcmp ( dp->d_name, "..") != 0) {
strcpy(specificFile, dp->d_name);
if ( dp->d_type == DT_REG) {
printf("%s\n", specificFile);
}
}
}
closedir(dir);
}
else {
perror (basePath);
}
return 0;
}
int main(){
char pathname1[200] = "/home/runner/TestC1";
char path[100] = "filename.txt";
listdir(pathname1, path);
return 0;
}
【问题讨论】:
-
你能使用与“.”相同的条件吗?和“..”?
-
您可以检查它是否是您需要的文件,而不是检查它是否不是
.或..- 顺便说一下,您当前的代码将崩溃或至少损坏内存通过任何名称比您传入的名称长的文件,您不能那样使用strcpy(事实上,您不应该使用strcpy永远,正因为如此它不能限制长度) -
目前,您正在将文件名复制到
specificFile指向的内存中。听起来specificFile已经包含一个文件名(可能应该是const)。在这种情况下,您需要使用strcmp将文件与specificFile进行比较,直到找到所需的文件。 -
请说明您如何称呼
specificSelection。strcpy(specificFile, dp->d_name)的目的是什么?为什么不简单地printf("%s\n", dp->d_name)?specificFile参数到底是什么?你的声望超过 50 点,所以我想你知道 minimal reproducible example 是什么 -
@user3121023 这将是一种非常复杂的方法来检查文件是否存在于目录中并在存在时打印其名称......
标签: c