| Форум РадиоКот 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 удалять эту папку автоматом? пусть компьютер создаёт ее, а при работе с микроконтроллером будет удаляться. Проблему вижу только в том, что папка защищена Я тут глянул описание библиотеки еще раз, а там сказано, что удаляет только пустую папку
|
|
| Автор: | 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/ |
|


