c - 尝试在 C、Linux 中递归打印所有小于特定大小的文件

标签 c linux file recursion size

当我尝试让所有文件都小于特定大小时,问题就出现了。在下面的代码中,如果 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/

相关文章:

c - 按字符串对结构体数组进行排序

c# - 尝试将 StreamWriter 打开到命名管道时 Mono 挂起

android - 文件模式 '*.psd'(来自 'bundled' 插件)被 'Adobe Photoshop' 插件重新分配给文件类型 'Android'

java - 追加一个文件,而不是覆盖它?

language-agnostic - 检查文件是否相同的最快方法是什么?

c - 如何创建分布式阵列 MPI

c++ - 如何优化高斯 pdf 的计算?

java - 如何通过位操作转换大小写?

linux - 加载 libtdbcmysql1.0.0.so 失败

c - syscalls.h 中的 sys_ 函数未定义