Возможно, вы сбиваете с толку цель dirent.h. Короче, может быть трудно увидеть лес для деревьев.
Вы можете прочитать информацию (ent-> d_name, отметить, что ent-> d_name является указателем на массив символов, часто называемый «строкой») в структуру данных (например, массив или список) затем используйте эту структуру с кодом, который обнаруживает нажатия кнопок, чтобы переместить индекс в информацию о массиве вверх или вниз (к большему или меньшему индексу, убедитесь, что ваш индекс не выходит за пределы диапазона или вашей структуры). Или вы можете создать код, в котором ваш цикл while будет нажат кнопку, и будет читать только имя файла (используя seekdir для возврата назад).
UPDATE (в ответ на комментарий): Имейте в виду, что файловые системы являются древовидные структуры, как так:
/ (root) +--- dir1 ----------------------------+- dir1.1
---- dir2 (empty) -- file1.1
---- dir3 ---- dir3.1 +--- file3.1
---- file1 ---- file3.2
---- file2
Вы должны решить, как справиться с этим, вы собираетесь только поддержку один каталог (заставьте их поместить все свои музыкальные файлы в одном месте), разрешить им перемещаться по каталогам или просматривать все каталоги, выбирая только файлы, которые вы знаете, как играть?
Нет наследования для файлов (или подкаталогов) и в некоторых системах файлы могут быть добавлены или удалены в любое время.
Вот очень простодушный пример одного из способов сохранить список записей каталога:
char *names[400]; // make space for 400 names
int ix;
ix = 0;
if (dir != NULL)
{
while ((ent = readdir (dir)) != NULL)
{
lcd.printf ("%s\n", ent->d_name[0]);
// allocate memory to store the name
names[ix] = (char*) malloc(strlen(ent->d_name)); // strlen from string.h
// malloc from stdlib.h
// copy the name from the directory entry
strcpy(names[ix], ent->d_name); // strcpy from string.h
ix++;
if (ix >= 400)
{
// do something because your array isn't big enough
}
}
}
Теперь у вас есть свои имена в «именах» массива и может обратиться к ним по индексу. Значение «ix-1» - ваше имя, 0 - ваше имя. Нажатие кнопок может увеличивать/уменьшать индекс в вашем массиве имен, который идентифицирует нужное имя. Имейте в виду, что некоторые из этих имен могут быть именами каталогов, а не именами файлов.
Понятно, что это просто, вы можете выделить массив, а не использовать фиксированное значение (на самом деле вам нужно, если вы хотите передать массив имен в вызывающую функцию), есть «безопасные «версии strcpy (предназначенные для предотвращения повреждения переполнения памяти) и т. д., но это должно дать вам представление о том, как сохранить имена в памяти.
Да, я все выяснил, как программировать, как только я получу индекс каждого файла. Но у меня проблемы с получением этого индекса. Если бы вы могли объяснить, как я могу получить индекс каждого файла, я бы очень его оценил. У меня как бы заканчиваются идеи, что еще попробовать ... – Scura
Я обновил ответ, чтобы расширить его содержимое – Dweeberly
Большое спасибо за вашу помощь. Подобно тому, что я пытался самостоятельно, но я думаю, что я не делал этого правильно. Во всяком случае, работает как шарм. Спасибо за помощь.:) – Scura