当我尝试让所有文件都小于特定大小时,问题就出现了。在下面的代码中,如果 size_smaller
是 -1,那么代码将只以递归方式打印目录中的所有文件(有效)。如果我将 size_smaller
设置为我想要打印小于 size_smaller
的文件的值,它不会。它将在根目录中打印较小值的文件,但不会在子目录中打印。希望你明白。
这是代码:
void list_recursive(char* path, int size_smaller){
DIR* dir;
struct dirent *dirent;
char * name = malloc(sizeof(char) * MAX_LEN);
dir = opendir(path);
if(dir != NULL){
if(isRec == 0){
printf("SUCCESS\n");
}
while((dirent = readdir(dir)) != NULL){
if(strcmp(dirent->d_name, ".") != 0 && strcmp(dirent->d_name, "..") != 0){
if(size_smaller == -1){
sprintf(name, "%s/%s", path, dirent->d_name);
printf("%s\n", name);
}
else if(size_smaller != -1 && dirent->d_type == DT_REG){
size_t sizeToCheck;
sprintf(name, "%s/%s", path, dirent->d_name);
FILE *fp;
fp = fopen(name, "r");
fseek(fp, 0, SEEK_END);
sizeToCheck = ftell(fp);
printf("\n%zu\n\n", sizeToCheck);
if(sizeToCheck < size_smaller){
printf("%s\n\n", name);
}
fclose(fp);
}
if(dirent->d_type == DT_DIR){
isRec = 1;
list_recursive(name, size_smaller);
}
}
}
free(name);
closedir(dir);
}
else {
printf("ERROR\n");
printf("invalid directory path\n");
}
最佳答案
我找到了解决方案。
问题出在这里:if(size_smaller == -1){
sprintf(名称, "%s/%s", 路径, dirent->d_name);
printf("%s\n", 名称);
}
只需要将 sprintf(name, "%s/%s", path, dirent->d_name);
放在 if 之外。
关于c - 尝试在 C、Linux 中递归打印所有小于特定大小的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591096/