Как я могу перечислить только файлы, начинающиеся с "/LOG?"

Попытка получить список корневого каталога LittleFS; но только файлы, начинающиеся с «/LOG».

String str;

                     if (!LittleFS.begin())
                     {
                          Serial.println("LittleFS failed to mount !");
                     }
                     Dir dir = LittleFS.openDir("/");
                     while (dir.next())
                     {



                        if(strncmp(dir.fileName().c_str(), "/LOG", 4) == 0)
                        {

                            str += "<a href=\"";
                            str += dir.fileName();
                            str += "\">";
                            str += dir.fileName();
                            str += "</a>";
                            str += "    ";
                            str += dir.fileSize();
                            str += "<br>\r\n";
                        }
                     }

                     client.print(str);

Если я закомментирую "if(strncmp(dir.fileName().c_str(), "/LOG", 4) == 0)" и соответствующие фигурные скобки; список всех файлов. Код с "if(strncmp(dir.fileName().c_str(), "/LOG", 4) == 0)" файлов нет в списке.

Как вывести список только тех файлов, которые начинаются с "/LOG?"

Уильям

, 👍0

Обсуждение

И вы уверены, что имена файлов *do* начинаются именно с символов /LOG?, @Majenko

Просто проверка здравомыслия здесь. Но разве / не используется в качестве разделителя пути? В моем мире / недопустимый символ для имен файлов или каталогов. В этом случае имена файлов в каталоге / не должны содержать /., @Kwasmich

@Kwasmich Если результат dir.fileName() не является полным абсолютным путем к файлу. Вот почему я спрашивал, действительно ли имена файлов начинаются с /LOG, @Majenko

@Маженко правда. Просто чтобы ничего не упустить из виду. strncmp чувствителен к регистру!, @Kwasmich

@Kwasmich Действительно. Не проблема, если он использует имена файлов 8.3, но может быть проблемой, если FS использует LFN., @Majenko

у вас есть объект String, возвращаемый fileName, и вы берете из него c-строку, чтобы использовать ее в strcmp? Строка имеет startsWith. И я думаю, что перечисленные файлы не начинаются с /., @Juraj


1 ответ


Лучший ответ:

2

Дать имя файла String в текст...

String text = "/LOGsdfsdf";
if(text.startsWith("/LOG")){
//маленький файл начинается с /LOG
}else{
// обрабатывает неверный файл.
}

Посмотрите здесь

https://www.arduino.cc/reference/en/language/ переменные/типы данных/строковый объект/

URL-адрес метода startsWith("");

https://www.arduino.cc/reference/en /language/variables/data-types/string/functions/startswith

,

FileZilla показывает имя файла как «LOG0608.TXT». Соглашение об именах: «LOG + месяц + дата + '.TXT'». Я мог бы перенести "/" с веб-сервера., @William

Требуется "dir.fileName()" для сравнения фактического имени файла с LOG0608.TXT. Я хочу, чтобы отображались только файлы, начинающиеся с «LOG»., @William

Dose dir.fileName() дает строку в виде "LOGXXXX.TXT" или "/LOGXXXX.TXT", @Avon97

Используется: String file_name = dir.fileName(); если (имя_файла.startsWith("ЖУРНАЛ")) { Спасибо!, @William

gr8 рад, что могу вам помочь, @Avon97