SD.exists() - как отличить файл от каталога?

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

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

Нет мыслей, как отличить одно от другого? Гугл навскидку не помог.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
rkit
Offline
Зарегистрирован: 23.11.2016

Попробуй проверять ошибку open().

А вообще, конечно, нужно искоренять сбои, а не пытаться работать вокруг них.

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

brokly пишет:

А гугель прям молчит ?

Это SdFat, а не SD. Поменять библиотеку конечно можно, но переписать придется не только это тогда. :)

rkit пишет:

Попробуй проверять ошибку open().

А вообще, конечно, нужно искоренять сбои, а не пытаться работать вокруг них.

Ошибку open я разумеется проверяю и отлавливаю, но это не отменяет. А касательно сбоев - они всегда возможны. У меня нет идей, с чем они могут быть связаны. Бывают редко, но бывают. Зависеть может например от производителя карт. Исключить их совсем в НЕ сферическом мире в вакууме невозможно. А значит, надо отлавливать. :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

rkit пишет:

Попробуй проверять ошибку open().

Нет там никакой ошибки. Директория тоже вполне открывается.

Чечако,

откройте файл и, если откроется, то спросите у получившегося объекта File директория он или нет (для это там есть метод isDirectory() )

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

ЕвгенийП пишет:

Нет там никакой ошибки. Директория тоже вполне открывается.

Чечако,

откройте файл и, если откроется, то спросите у получившегося объекта File директория он или нет (для это там есть метод isDirectory() )

Я сейчас отлавливаю при попытке создать файл в этой директории, он понятно что не создается, если вместо нее файл. А вот про isDirectory забыл, спасибо! При этом сам его использую в другом месте. :)

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Чечако пишет:

Это SdFat, а не SD. Поменять библиотеку конечно можно, но переписать придется не только это тогда. :)

Даааа... Это сильно меняет дело. isDirectory() и isFile() это ооочень редкие функции присущи исключительно FAT. :)

Ты хоть ссыль то мою открывал ? 

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

brokly пишет:

Даааа... Это сильно меняет дело. isDirectory() и isFile() это ооочень редкие функции присущи исключительно FAT. :)

Ты хоть ссыль то мою открывал ? 

Виноват, ага. Про isDirectory мне уже напомнили. И я у себя даже использование нашел уже. :) Когда проект ведется годами и занимает сотни килобайт кода, сложно все помнить, к сожалению. :( А в тот момент увидел sdFat, и среагировал на это. :)