Например TDA7294

Форум РадиоКот • Просмотр темы - SD и папка "System Volume Information"
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср дек 24, 2025 13:19:44

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: SD и папка "System Volume Information"
СообщениеДобавлено: Ср авг 28, 2024 13:12:06 
Собутыльник Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 252
Зарегистрирован: Ср янв 16, 2008 08:34:04
Сообщений: 2560
Откуда: KMV
Рейтинг сообщения: 0
Предыстория...
Решил я тут попробовать поработать с файлами на карте 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 не имеют расширения, но при запуске последнего куска кода все равно включаются в подсчет числа файлов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Ср авг 28, 2024 13:34:01 
Друг Кота
Аватар пользователя

Карма: 59
Рейтинг сообщений: 2218
Зарегистрирован: Чт янв 26, 2012 16:44:29
Сообщений: 19562
Откуда: Таксимо
Рейтинг сообщения: 0
А скрыть, как у всех устройств читает же атрибуты

_________________
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Ср авг 28, 2024 14:50:25 
Собутыльник Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 252
Зарегистрирован: Ср янв 16, 2008 08:34:04
Сообщений: 2560
Откуда: KMV
Рейтинг сообщения: 0
Так папка и так скрытая, но приведенные выше функции все равно её включают в общую сумму

Так! С одним пунктом разобрался. Строчку кода
Код:
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();
  }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Чт авг 29, 2024 08:13:48 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 15, 2016 12:48:20
Сообщений: 24
Рейтинг сообщения: 0
(fnfo.fattrib & AM_DIR) != 0) это указатель на папку
а это #define AM_HID 0x02 // Hidden скрытый файл
скомпоновать условие и вуаля


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Пн сен 02, 2024 11:16:08 
Собутыльник Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 252
Зарегистрирован: Ср янв 16, 2008 08:34:04
Сообщений: 2560
Откуда: KMV
Рейтинг сообщения: 0
(fnfo.fattrib & AM_DIR) != 0) это указатель на папку
а это #define AM_HID 0x02 // Hidden скрытый файл
скомпоновать условие и вуаля

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Чт сен 05, 2024 09:43:33 
Друг Кота

Карма: -8
Рейтинг сообщений: 15
Зарегистрирован: Вс июл 24, 2011 11:38:09
Сообщений: 7589
Рейтинг сообщения: 0
Нафига она вообще на карте ? Удалить её нафиг, не может же винда быть установлена на медленную флешку.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Пт сен 06, 2024 13:46:47 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 15, 2016 12:48:20
Сообщений: 24
Рейтинг сообщения: 0
Имелась ввиду библиотека fatfs от Чана
Но аттрибуты файлов должны быть во всех библиотеках


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Вт сен 10, 2024 10:37:43 
Собутыльник Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 252
Зарегистрирован: Ср янв 16, 2008 08:34:04
Сообщений: 2560
Откуда: KMV
Рейтинг сообщения: 0
Нафига она вообще на карте ? Удалить её нафиг, не может же винда быть установлена на медленную флешку.

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SD и папка "System Volume Information"
СообщениеДобавлено: Вт сен 10, 2024 13:13:51 
Первый раз сказал Мяу!

Зарегистрирован: Вт ноя 15, 2016 12:48:20
Сообщений: 24
Рейтинг сообщения: 0
Библиотека SdFat файл FsStructs.h
const uint8_t FS_ATTRIB_HIDDEN = 0x02;
const uint8_t FS_ATTRIB_DIRECTORY = 0x10;


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y