Я пытаюсь прочитать заданный каталог filePath и получить имена всех файлов, не являющихся папками, в массив строк. Итак, проблема, которую мне нужно решить, заключается в том, как конкретно не получать файлы типа папок, а также получать имена всех других типов файлов и сохранять их в строковом массиве. Позже я планирую использовать потоки для чтения этих отдельных файлов. но я должен уметь правильно хранить имена файлов. Код, который я сейчас использую, приведен ниже. Следует также отметить, что этот код выполняется дочерним процессом из команды fork (), но я не уверен, имеет ли это отношение к проблеме в любом случае. Любая помощь будет оценена. Спасибо.
Пример. В разделе «Домашняя страница / Документы» есть 4 файла: hello.txt что-то. , и что-то2.dat
Примечание: для меня нормально не делать файлы как I go через каталог, так как сами файлы не будут изменены при любом содержании.
//char* directory is an absolute filePath to the directory
void getFilesFromDirectory(char* directory, pid_t process)
{
int index =0;
DIR *dir;
struct dirent *ent;
//Can hold only 500 valid files in the folder
char *stringArray[500];
if ((dir = opendir (directory)) != NULL)
{
while ((ent = readdir (dir)) != NULL)
{
strcpy(stringArray[index],ent->d_name);
index++;
}
closedir (dir);
}
else
{
/* could not open directory */
perror ("");
}
//Everything Below is not related to the problem. Just what I am using it for.
pthread_t threadArray[index];
pthread_t senderThread;
//thread_param_t parameterSender;
thread_param_t paramterArray[index];
sem_init(&empty,0,bufferSize);
sem_init(&full, 0, 0);
sem_init(&mutex, 0, 1);
//parameterSender.listItem = listHead;
pthread_create(&senderThread, NULL, senderFunction, NULL);
//int threadCounter = 0;
for(int i =0; i<index; i++)
{
paramterArray[i].fileLocation = strcat(directory, stringArray[i]);
pthread_create(&threadArray[i], NULL, threadFunction, paramterArray + i);
}
}