Сортировка каталогов на SD Карте по умолчанию.
- Войдите на сайт для отправки комментариев
Пт, 11/10/2019 - 17:53
Приветствую!
Вопрос имею - а по какому принципу отсортированы файлы и каталоги на SD карте, если я использую .openNextFile() ? Название? Дата создание? Что-то другое?
Используется стандартная библиотека SD.h, если это важно.
Просто задумался, на сколько этот порядок всегда постоянен, и от чего вообще зависит. Гугл навскидку не помог. Он (порядок) меня полностью устраивает, если что - но мне важно, чтобы он таким и оставался после использования .rewindDirectory();
По имени в кодах.
По имени в кодах.
Легче не стало. :) В каких именно кодах? То, что не по названию - это я вижу, вот создал тестовые каталоги - они в списке оказался в порядке создания:
Три нижних. Это выдача содержимого корня по NextFile. Все в списке - каталоги. В каком порядке создал, в таком в списке и идут.
Создаётся файл - в файловой системе об этом добавляется запись. Одна за другой. Вот в этом порядке оно их и выдаёт (в пределах одного каталога). Т.е. формально совпадает с сортировкой по времени создания.
Создаётся файл - в файловой системе об этом добавляется запись. Одна за другой. Вот в этом порядке оно их и выдаёт (в пределах одного каталога). Т.е. формально совпадает с сортировкой по времени создания.
Отлично, спасибо. Так и предполагал, но хотелось подтверждения догадки. :)
Что там делается когда файлы удаляются, а потом новые создаются - уже не помню. Нужно смотреть про устройство FAT. Но имена файлов тут точно не при чём.
Что там делается когда файлы удаляются, а потом новые создаются - уже не помню. Нужно смотреть про устройство FAT. Но имена файлов тут точно не при чём.
Понаблюдаю. Там есть одна аномалия в полном списке, но она может быть связана с тем, что я вмешивался в работу карты, что-то мог копировать с компьютера. Уже просто не помню. Разбирать список и переформировывать не хотелось бы. Даты создания пишу, если что. Посредством SdFile::dateTimeCallback
Создаётся файл - в файловой системе об этом добавляется запись. Одна за другой. Вот в этом порядке оно их и выдаёт (в пределах одного каталога). Т.е. формально совпадает с сортировкой по времени создания.
Спецификацию данной функции не читал, но сказанное как то не логично. Чтение директории идёт по имени файла (или поддериктории). Иначе хаос получается. Хотя в ардуино может как то и иначе это все происходит. Носки на вазу, в вазу ноги. Хз.
Спецификацию данной функции не читал, но сказанное как то не логично. Чтение директории идёт по имени файла (или поддериктории). Иначе хаос получается. Хотя в ардуино может как то и иначе это все происходит. Носки на вазу, в вазу ноги. Хз.
Не правы. Чтение директории идет по записям в списке каталога. Имя файла тут абсолютно не причем. И это так не только в ардуино - это типичное поведение файловой системы, например, в ДОСе
Не правы. Чтение директории идет по записям в списке каталога. Имя файла тут абсолютно не причем. И это так не только в ардуино - это типичное поведение файловой системы, например, в ДОСе
Меня смущает ровно одна аномалия. У меня каталоги создает сам же МК, в режиме даталоггера. Одна дата - один каталог, внутри уже разные файлы за эту дату. Т.е. по идее - каждый каталог создается в свой день, и в неизменном порядке. Но один выбивается - каталог за 0710 по сортировке находится между 2709 и 2809. Почему - хз. Разве что я на днях карту прогонял тестом в винде, и он там какой-то кривой файл пофиксил - возможно дело в этом. Пока запустил отстрел старых логов исходя из той сортировки, которая должна быть, посмотрим как свою работу выполнять будет. Причем в винде через FAR - никакими сортировками (в том числе и unsorted) я эту аномалию повторить не смог, она присутствует только при чтении каталога дуиной посредством .openNextFile()в цикле.
А если без оболочек тем же nextfile в Винде?
Да для начала хотя бы порядок, в котором выдает команда dir без сортировки?
В общем, халявы не будет. :) FAT вполне умеет создавать новые каталоги на месте снесенных. И да, порядок сортировки у arduino и у команды dir в винде совпадают.
Выглядит это как-то так:
Это поведение логично для корневого каталога. У него число записей ограничено. Удаляемые помечаются, как удалённые. Какое-то время создаются новые записи. А вот как конца достигли, новые записи будут создаваться на месте удалённых. Если первый удаляется, то на его месте и создаётся новая.
А вот с подкаталогами, которые там вроде как обычные файлы, я за давностью лет не помню как это должно работать. Судя по эксперименту, тоже какое-то ограничение есть, после которого записи перезаписываться начинают, и результат такой же получается.
Судя по эксперименту, тоже какое-то ограничение есть, после которого записи перезаписываться начинают, и результат такой же получается.
Именно так. Оно и к лучшему, на самом деле. Свой алгоритм надежнее чужого. :)
Чем дольше живу - тем больше понимаю, что нифига не знаю... Спасибо, в копилку отложил!