Продолжаю игрища с sd картой. Если при записи данных в файл можно узнать его размер и есть функции для чтения выборочных данных, можно читать с начала и с конца, то для работы с несколькими файлами полный ступор. Может кто то сталкивался как можно определить сколько файлов записано на карту и как их можно перебирать?
Все достаточно просто, но НЕ слишком изящно, нужно просто тупо в цикле вычитывать имена файлов. Следующий код выводит содержимое флэшки на вебстраницу. Код (C++): // вывод имен .csv файлов на веб-страницу в отсортированом виде void PrintSortFileName(File dir) { TimeElements te; String fname; char ff[9]="\0"; char filename[100][9]; long fsize[100]; long OneDay = (60L * 60L * 24L); // 1 день int i=0; // счетчик файлов // сканируем SDшку // while (true) { File entry = dir.openNextFile(); if (! entry) {dir.rewindDirectory();break;} // no more files fname = entry.name(); if ((fname.indexOf(".CSV") > 0)) //|| (fname.indexOf(".csv") > 0) { fname.toCharArray(ff,9); //имя файла if (i < 100) //т.к. массив на 100 элементов { memcpy(&filename[i][0], ff, 9); //заносим в массив fsize[i] = entry.size(); //размер файла } i++; } entry.close(); } //перебираем даты от сегодня и назад for (long j = 0; j < i; j++) { time_t d = now() - (OneDay * j); breakTime(d, te); fname = String(te.Year + 1970); // на основе даты формируем имя файла fname += TwoDigit(te.Month); fname += TwoDigit(te.Day); fname += ".CSV"; fname.toCharArray(ff,9); //ищем в массиве с файлами соответствующее имя //т.к. массив на 100 элементов, счетчик задаем = 100 // если файл старше 100 дней - хер на него for (int k = 0; k < 100; k++) { if (!strncmp(&filename[k][0],ff,9)) //если имя совпало - выводим его { wclient.println(F("<li><a href='")); wclient.println(fname); wclient.println(F("' target='_blank'>")); wclient.println(fname); wclient.println(F("</a>")); wclient.println(F("  ")); wclient.println(fsize[k], DEC); wclient.println(F("</li>")); break; } } } } У меня файлы имеют имя типа: 20151221.csv. Так как нет никакой возможности отсортировать файлы я использовал два прохода. В первом я заполняю массив именами файлов, а во втором я иду от сегодня взад на 100 дней и выбираю имена уже из массива. Если соответствующее имя найдено, то вывожу его на веб-страницу.