Как хранить имена путей в списке или массив строк в C? - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть следующий код для рекурсивного поиска файлов в папке. Аргументы, которые мне предлагается ввести, - это путь, по которому находятся файлы, и 2 «подстановочный знак» файлов, которые я пытаюсь перечислить:

#include <dirent.h>
#include <stdio.h>
#include <string.h>
#define MAX_STRING_SIZE 255

void listFilesRecursively(char *path, char *suffix);


int main()
{
    // Directory path to list files
    char path[100];
    char suffix[100];

    // Suffix Band Sentinel-2 of Type B02_10m.tif

    // Input path from user
    printf("Enter path to list files: ");
    scanf("%s", path);
    printf("Enter the wildcard: ");
    scanf("%s", suffix);

    listFilesRecursively(path, suffix);

    return 0;
}

int string_ends_with(const char * str, const char * suffix)
{
    int str_len = strlen(str);
    int suffix_len = strlen(suffix);

    return 
        (str_len >= suffix_len) &&
        (0 == strcmp(str + (str_len-suffix_len), suffix));
}

/**
 * Lists all files and sub-directories recursively 
 * considering path as base path.
 */
void listFilesRecursively(char *basePath, char *suffix)
{
    char path[1000];
    struct dirent *dp;
    DIR *dir = opendir(basePath);


    // Unable to open directory stream
    if (!dir)
        return;


    while ((dp = readdir(dir)) != NULL)
    {

        if (strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0)
        {
            //printf("%s\n", dp->d_name);

            // Construct new path from our base path
            strcpy(path, basePath);
            strcat(path, "/");
            strcat(path, dp->d_name);

            if (string_ends_with(path, suffix))
                printf("%s\n", path);

            listFilesRecursively(path, suffix);
        }
    }
    //int num = sizeof(arr) / sizeof(arr[0]);
    //printf("%d", num);
    //for(int i = 0; i <= num; i++){
    //    printf(arr[i]);

    closedir(dir);
}

Он работает нормально, потому что печатает файлы, которые заканчиваются наопределенное окончание (строка 66:67), однако, как я могу сохранить эти значения в списке для возврата в моей программе? Я пробовал разные вещи, но ни одна из них не работала.

Большое спасибо!

...