Например TDA7294

Форум РадиоКот :: Просмотр темы - SD и папка "System Volume Information"
Форум РадиоКот
https://radiokot.ru/forum/

SD и папка "System Volume Information"
https://radiokot.ru/forum/viewtopic.php?f=66&t=194683
Страница 1 из 1

Автор:  serg_svd [ Ср авг 28, 2024 13:12:06 ]
Заголовок сообщения:  SD и папка "System Volume Information"

Предыстория...
Решил я тут попробовать поработать с файлами на карте SD посредством библиотек и среды разработки Arduino. Для начала просто хотел посчитать количество папок и файлов на карте SD, потом уже посчитать количество файлов с разными расширениями.
И тут мне вес поломала скрытая папка "System Volume Information"!!! Дело в том, что она включается в количество папок, а находящийся внутри файлы - в общее число подсчитываемых файлов.

Теперь вопрос. Как пропустить эту папку из подсчета. Да и вообще в дальнейшем игнорировать ее на карте памяти? Я долго мучал поисковик, но, похоже, неправильно задаю ему вопрос. В общем решения пока не нашел.

В общем виде, согласно примерам из библиотеки SD, подсчет файлов и папок выглядит так:
Спойлер
Код:
void scanSD(File dir) { 
  while (true) {
    File entry =  dir.openNextFile();
    if (!entry) {
      // no more files
      break;
    }           
    if (entry.isDirectory()) {
        dirCnt++; // считаем количество папок
        scanSD(entry);
      }
    } else {
        fileCnt++;  // считаем количество файлов     
    }
    entry.close();
  }
}


Если подсчитывать, к примеру, файлы с расширением *.txt, то код выглядит так
Спойлер
Код:
void scanSD(File dir) { 
  while (true) {
    File entry =  dir.openNextFile();
    if (!entry) {
      // no more files
      break;
    }           
    if (entry.isDirectory()) {
        dirCnt++; // считаем количество папок
        scanSD(entry);
      }
    } else {
      fileName = entry.name();
      if (fileName.indexOf(".txt")) {
        fileCnt++;    // считаем количество файлов с расширением   
      }   
    }
    entry.close();
  }
}


Причем файлы внутри папки System Volume Information не имеют расширения, но при запуске последнего куска кода все равно включаются в подсчет числа файлов.

Автор:  vlasovzloy [ Ср авг 28, 2024 13:34:01 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

А скрыть, как у всех устройств читает же атрибуты

Автор:  serg_svd [ Ср авг 28, 2024 14:50:25 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

Так папка и так скрытая, но приведенные выше функции все равно её включают в общую сумму

Так! С одним пунктом разобрался. Строчку кода
Код:
if (fileName.indexOf(".txt")) {}

надо записывать так
Код:
if (fileName.indexOf(".txt")>0) {}

Тогда подсчет файлов по расширению идет верно

Добавлено after 1 hour 12 minutes 46 seconds:
Вроде сделал, но на мой взгляд вариант с вычитанием из количества папок какой-то хромой...
Жду критики!
Спойлер
Код:
void scanSD(File dir) { 
  while (true) {
    File entry =  dir.openNextFile();
    if (!entry) {
      // no more files
      break;
    }           
    if (entry.isDirectory()) {
      dirName = entry.name();   
      if (dirName.indexOf("SYSTEM~1") == 0) {
        dirCnt--;
      }
      dirCnt++;
      scanSD(entry);
    } else {
      fileName = entry.name();
      if (fileName.indexOf(".txt") > 0) {
        fileCnt++;       
      }
    }
    entry.close();
  }
}

Автор:  john1770 [ Чт авг 29, 2024 08:13:48 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

(fnfo.fattrib & AM_DIR) != 0) это указатель на папку
а это #define AM_HID 0x02 // Hidden скрытый файл
скомпоновать условие и вуаля

Автор:  serg_svd [ Пн сен 02, 2024 11:16:08 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

(fnfo.fattrib & AM_DIR) != 0) это указатель на папку
а это #define AM_HID 0x02 // Hidden скрытый файл
скомпоновать условие и вуаля

Я не нашел в библиотеке SD данных указателей. Начал читать информацию в сети что-то запутался. Есть библиотека SD, а ест SDfat/ Какую посоветуете использовать и по какой причине??? Я вычитал такое мнение, что SDfat быстрее работает и лучше применять ее вместо "устаревшей" библиотеки SD. Только вот в чем она устарела мне тоже непонятно.
Опять же! Библиотека Sdfat есть авторская, а есть SdFat - Adafruit Fork

Автор:  74LS00 [ Чт сен 05, 2024 09:43:33 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

Нафига она вообще на карте ? Удалить её нафиг, не может же винда быть установлена на медленную флешку.

Автор:  john1770 [ Пт сен 06, 2024 13:46:47 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

Имелась ввиду библиотека fatfs от Чана
Но аттрибуты файлов должны быть во всех библиотеках

Автор:  serg_svd [ Вт сен 10, 2024 10:37:43 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

Нафига она вообще на карте ? Удалить её нафиг, не может же винда быть установлена на медленную флешку.

А если пользователь не знает, как удалять эту папку? Она же по умолчанию создается каждый раз, когда карта памяти подключена к компьютеру. Это фигня по дефолту стоит в системе. Поэтому и надо написать прошивку так, чтобы эта папка игнорировалась.
PS. Хотя сейчас пришла мысль, а нельзя ли средствами библиотеки SD удалять эту папку автоматом? пусть компьютер создаёт ее, а при работе с микроконтроллером будет удаляться. Проблему вижу только в том, что папка защищена

Я тут глянул описание библиотеки еще раз, а там сказано, что удаляет только пустую папку :facepalm:

Автор:  john1770 [ Вт сен 10, 2024 13:13:51 ]
Заголовок сообщения:  Re: SD и папка "System Volume Information"

Библиотека SdFat файл FsStructs.h
const uint8_t FS_ATTRIB_HIDDEN = 0x02;
const uint8_t FS_ATTRIB_DIRECTORY = 0x10;

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/