Сортировка каталогов на SD Карте по умолчанию.

Чечако
Offline
Зарегистрирован: 15.06.2018

Приветствую!

Вопрос имею - а по какому принципу отсортированы файлы и каталоги на SD карте, если я использую .openNextFile() ? Название? Дата создание? Что-то другое?

Используется стандартная библиотека SD.h, если это важно. 

Просто задумался, на сколько этот порядок всегда постоянен, и от чего вообще зависит. Гугл навскидку не помог. Он (порядок) меня полностью устраивает, если что - но мне важно, чтобы он таким и оставался после использования .rewindDirectory(); 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

По имени в кодах. 

Чечако
Offline
Зарегистрирован: 15.06.2018

BOOM пишет:

По имени в кодах. 

Легче не стало. :) В каких именно кодах? То, что не по названию - это я вижу, вот создал тестовые каталоги - они в списке оказался в порядке создания:

20191001
20191002
20191003
20191004
20191005
20191006
20191008
20191009
20191010
20191011
20180101
20170101
20180201
 

Три нижних. Это выдача содержимого корня по NextFile. Все в списке - каталоги. В каком порядке создал, в таком в списке и идут.

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Создаётся файл - в файловой системе об этом добавляется запись. Одна за другой. Вот в этом порядке оно их и выдаёт (в пределах одного каталога).  Т.е. формально совпадает с сортировкой по времени создания.

Чечако
Offline
Зарегистрирован: 15.06.2018

kalapanga пишет:

Создаётся файл - в файловой системе об этом добавляется запись. Одна за другой. Вот в этом порядке оно их и выдаёт (в пределах одного каталога).  Т.е. формально совпадает с сортировкой по времени создания.

Отлично, спасибо. Так и предполагал, но хотелось подтверждения догадки. :)

kalapanga
Offline
Зарегистрирован: 23.10.2016

Что там делается когда файлы удаляются, а потом новые создаются - уже не помню. Нужно смотреть про устройство FAT. Но имена файлов тут точно не при чём.

Чечако
Offline
Зарегистрирован: 15.06.2018

kalapanga пишет:

Что там делается когда файлы удаляются, а потом новые создаются - уже не помню. Нужно смотреть про устройство FAT. Но имена файлов тут точно не при чём.

Понаблюдаю. Там есть одна аномалия в полном списке, но она может быть связана с тем, что я вмешивался в работу карты, что-то мог копировать с компьютера. Уже просто не помню. Разбирать список и переформировывать не хотелось бы. Даты создания пишу, если что. Посредством SdFile::dateTimeCallback

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

kalapanga пишет:

Создаётся файл - в файловой системе об этом добавляется запись. Одна за другой. Вот в этом порядке оно их и выдаёт (в пределах одного каталога).  Т.е. формально совпадает с сортировкой по времени создания.

Спецификацию данной функции не читал, но сказанное как то не логично. Чтение директории идёт по имени файла  (или поддериктории). Иначе хаос получается. Хотя в ардуино может как то и иначе это все происходит. Носки на вазу, в вазу ноги. Хз. 

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

Спецификацию данной функции не читал, но сказанное как то не логично. Чтение директории идёт по имени файла  (или поддериктории). Иначе хаос получается. Хотя в ардуино может как то и иначе это все происходит. Носки на вазу, в вазу ноги. Хз. 

Не правы. Чтение директории идет по записям в списке каталога. Имя файла тут абсолютно не причем. И это так не только в ардуино - это типичное поведение файловой системы, например, в ДОСе

Чечако
Offline
Зарегистрирован: 15.06.2018

b707 пишет:

Не правы. Чтение директории идет по записям в списке каталога. Имя файла тут абсолютно не причем. И это так не только в ардуино - это типичное поведение файловой системы, например, в ДОСе

Меня смущает ровно одна аномалия. У меня каталоги создает сам же МК, в режиме даталоггера. Одна дата - один каталог, внутри уже разные файлы за эту дату. Т.е. по идее - каждый каталог создается в свой день, и в неизменном порядке. Но один выбивается - каталог за 0710 по сортировке находится между 2709 и 2809. Почему - хз. Разве что я на днях карту прогонял тестом в винде, и он там какой-то кривой файл пофиксил - возможно дело в этом. Пока запустил отстрел старых логов исходя из той сортировки, которая должна быть, посмотрим как свою работу выполнять будет. Причем в винде через FAR - никакими сортировками (в том числе и unsorted) я эту аномалию повторить не смог, она присутствует только при чтении каталога дуиной посредством .openNextFile()в цикле. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А если без оболочек тем же nextfile в Винде?

Да для начала хотя бы порядок, в котором выдает команда dir без сортировки?

Чечако
Offline
Зарегистрирован: 15.06.2018

В общем, халявы не будет. :) FAT вполне умеет создавать новые каталоги на месте снесенных. И да, порядок сортировки у arduino и у команды dir в винде совпадают.

Выглядит это как-то так:

/LOGS/20191016/
/LOGS/20190927/
/LOGS/20191007/
/LOGS/20190928/
/LOGS/20190929/
/LOGS/20190930/
/LOGS/20191001/
/LOGS/20191002/
/LOGS/20191003/
/LOGS/20191004/
/LOGS/20191005/
/LOGS/20191006/
/LOGS/20191008/
/LOGS/20191009/
/LOGS/20191010/
/LOGS/20191011/
 
Начиная с 12 числа логротатор создавал каждый день новый каталог, который получался на первом месте, и на следующий день успешно его грохал. :) Потому как оказывался новый каталог в списке первым. Как и сейчас - 16.10 идет на первом месте.
 
Так что буду сам сортировать список на отстрел. Собственно, оно так по любому правильнее.
kalapanga
Offline
Зарегистрирован: 23.10.2016

Это поведение логично для корневого каталога. У него число записей ограничено. Удаляемые помечаются, как удалённые. Какое-то время создаются новые записи. А вот как конца достигли, новые записи будут создаваться на месте удалённых. Если первый удаляется, то на его месте и создаётся новая.

А вот с подкаталогами, которые там вроде как обычные файлы, я за давностью лет не помню как это должно работать. Судя по эксперименту, тоже какое-то ограничение есть, после которого записи перезаписываться начинают, и результат такой же получается.

Чечако
Offline
Зарегистрирован: 15.06.2018

kalapanga пишет:

 Судя по эксперименту, тоже какое-то ограничение есть, после которого записи перезаписываться начинают, и результат такой же получается.

Именно так. Оно и к лучшему, на самом деле. Свой алгоритм надежнее чужого. :)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Чем дольше живу - тем больше понимаю, что нифига не знаю... Спасибо, в копилку отложил!