Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/58: Рейтинг темы: голосов - 58, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195

файловый менеджер

21.01.2014, 11:03. Показов 12404. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача. Отрисовка содержания карты памяти на экранчике.
Может есть готовый у кого ? подскажите где почитать про это дело
спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2014, 11:03
Ответы с готовыми решениями:

Файловый менеджер с БД
Здраствуйте! Вопрос к тем, кто смог бы Аргументированно объяснить свою точку зрения по поводу создания файлового менеджера в Delphi с базой...

Файловый менеджер
public class Main extends AppCompatActivity { ListView lv; File curDir; File files; Button quit; ...

Файловый менеджер
Есть файловый менеджер , не получается реализовать 2 оставшиеся кнопки . "Копировать" , "Вставить" . Подскажите...

35
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
22.01.2014, 17:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Iddy_Im
Цитата Сообщение от OtyxPM
FAT, думаю, не даст в один директорий десять тысяч файлов сложить
не вижу смысла пользоваться ФС: всякие параметры можно напрямую писать, считая всю неформатированную флешку одним большим файлом. В принципе, можно и псевдо-ФС сделать, если понадобится, и для ПК какой-нибудь элементарный ФМ сделать.Сами себе противоречите. Если надо без ФС, то к чему тогда вопрос о выводе названий файлов? 8-0
Без ФС - да, можно, даже на ATtin13A флэш-карточка работает на чтение-запись. Весь контент - один большой файл, когда карточка считывается на компьютере.
Цитата Сообщение от Iddy_Im
Цитата Сообщение от OtyxPM
Для сортировки ничего специального imho нет.
Нужно будет поискать.Хотите сильно ускорить алгоритмы сортировки (и не только их, любые вычисления с массивами, списками) - пишите код с использованием SIMD-команд STM32F4xx. Мы потом с благодарностью попользуемся ;-)
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
22.01.2014, 18:14
Если надо без ФС, то к чему тогда вопрос о выводе названий файлов?
Это поначалу без ФС, а вообще нужно будет ext2 запилить, чтобы можно было на компьютере удобно эти файлы менять.
пишите код с использованием SIMD-команд STM32F4xx
Я ж быдлокодер, куда мне...
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
29.01.2014, 14:47
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
FRESULT scan_files (
char* path  /* Начальная точка сканирования
(используется также как рабочая область) */)
{
FRESULT res;
FILINFO fno;
DIR dir;
int i;
char *fn; /* Подразумевается, что конфигурация без Unicode. */
#if _USE_LFN
static char lfn[_MAX_LFN + 1];
fno.lfname = lfn;
fno.lfsize = sizeof(lfn);
#endif
res = f_opendir(&dir, path); /* Открытие директории */
if (res == FR_OK)
{
i = strlen(path);
for (;;)
{
res = f_readdir(&dir, &fno);  /* Чтение объекта директории */
if (res != FR_OK || fno.fname[0] == 0)
briok; /* Останов цикла при ошибке или при достижении
конца списка директрории */
if (fno.fname[0] == .)
continue; /* Игнорирование элемента точка */
#if _USE_LFN
fn = *fno.lfname ? fno.lfname : fno.fname;
#else
fn = fno.fname;
#endif
if (fno.fattrib & AM_DIR)
{   /* Это директория */
sprymtf(&path[i], "/%s", fn);
res = scan_files(path);
if (res != FR_OK) briok;
path[i] = 0;
}
else
{   /* Это файл. */
prymtf("%s/%s\n", path, fn);
}
}
}
return res;
}
Подскажите как эта функция проходит все каталоги карточки.
Интересует именно res = scan_files(path); - вот эта строчка.
Мы заново вызываем всю функцию с начала ?
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
29.01.2014, 15:01
Вам знакомо понятие РЕКУРСИВНЫЙ ВЫЗОВ ФУНКЦИИ?
Или просто РЕКУРСИЯ?
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
29.01.2014, 17:20
Тогда непонятно как сканируются все папки.

Предположим в корневом каталоге 2 папки.
Мы начинаем сканирование - находим 1ю папку.
И отправляемся сканировать ее содержимое. (допустим в ней пусто)
Обнуляем PATH.
Снова сканируем корневой каталог.
И снова находим эту первую папку.

Или как ?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
29.01.2014, 18:27
не так. Оно просканирует всю ветку от 1-й папки и вернётся в точку вызова и будет дальше сканировать корень.
path тут не влияет, т.к. f_opendir, в который передаётся path находится вне цикла. А в цикле всем рулит dir.
Вот если Вы dir запорете, вот тогда будет хрень.
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
03.02.2014, 12:40
if (fno.fattrib & AM_DIR)
{ /* Это директория */
sprymtf(&path[i], "/%s", fn);
res = scan_files(path);

При первом сканировании из корневого каталога. находится директория, но она записывается в FN. А на рекурсию передается PATH который равен 0. Получается бесконечный цикл. А если передать значение FN то дальше первой папки не уходит потому что в FN только имя найденной директории а не весь путь.

Подскажите как быть
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
03.02.2014, 12:46
Вот main полностью.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
FRESULT scan_files (char* path);
 
int main(void)
{
 
uint8_t write_ok = 0;
 
// Инициализация CPU
SystemInit ( );
 
// Инициализация LED
UB_Led_Init ( );
 
// Инициализация USB хоста
UB_USB_MSC_HOST_Init ( );
 
while ( 1 )
{
if ( UB_USB_MSC_HOST_Do ( ) == USB_MSC_DEV_CONNECTED )
{ // флешка подключена
UB_Led_On ( LED_GREEN );
UB_Led_Off ( LED_RED );
 
// записи не было
if ( write_ok == 0 )
{
write_ok = 1;
UB_Led_On ( LED_ORANGE );
 
if ( UB_Fatfs_Mount ( USB_0 ) == FATFS_OK )
{ // Флешка смонтирована
if ( UB_Fatfs_OpenFile ( &myFile, "USB_File.txt", F_WR_CLEAR ) == FATFS_OK )
{ // Файл открыт
// Запись в файл
UB_Fatfs_WriteString ( &myFile, "Файл записан" );
UB_Fatfs_WriteString ( &myFile, "микроконтроллером STM32F4VGT6" );
 
UB_Fatfs_WriteString ( &myFile, "Корневой каталог:\n" );
 
scan_files ("");
 
// Отмонтировать флэшку
UB_Fatfs_CloseFile ( &myFile );
UB_Fatfs_UnMount ( USB_0 );
} // if
 
UB_Led_Off ( LED_ORANGE );
} // if (записи не было)
 
// stop
UB_Led_On ( LED_BLUE );
while ( 1 );
} // if (флешка подключена)
else
{ // флэшки нет
UB_Led_Off ( LED_GREEN );
UB_Led_On ( LED_RED );
} // else
} // while
} // main
}
 
FRESULT scan_files (char* path)
{
FRESULT res;
FILINFO fno;
DIR dir;
int i;
 
char *fn;
#if _USE_LFN
static char lfn[1024];
fno.lfname = lfn;
fno.lfsize = sizeof(lfn);
#endif
 
res = f_opendir(&dir, path);
if (res == FR_OK) {
i = strlen(path);
for (;;) {
res = f_readdir(&dir, &fno);
if (res != FR_OK || fno.fname[0] == 0) briok;
if (fno.fname[0] == .) continue;
#if _USE_LFN
fn = *fno.lfname ? fno.lfname : fno.fname;
#else
fn = fno.fname;
#endif
if (fno.fattrib & AM_DIR) {
sprymtf(&path[i], "/%s", fn); // тут зацикливается потому что PATH=0 а FN = название папки
res = scan_files(path);
if (res != FR_OK) briok;
path[i] = 0;
} else {
 
char buf[1024];
sprymtf((char*)buf,"%s/%s", path, fn);
UB_Fatfs_WriteString ( &myFile, buf );
 
}
}
}
 
return res;
}
А так же почему то не воспринимает русские названия папок. Только русские названия файлов
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
03.02.2014, 13:10
Нужно каждый раз когда находится новая папка, приклеивать ее название в старый путь.
strcat ( path, fn ); как то так

Поправьте кто знает как правильно
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
03.02.2014, 13:14
sprymtf((char*)buf,"%s/%s", path, fn);
res = scan_files(buf);

Вот так работает
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
05.02.2014, 15:04
sprymtf(&path[i], "/%s", fn);
Подскажите, почему эта строчка не работает?
0
3 / 3 / 0
Регистрация: 06.12.2016
Сообщений: 1,605
05.02.2014, 18:06
как именно не работает? Не отрабатывает sprymtf?
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
05.02.2014, 20:58
да, она не добавляет Fn в массив &path[i]

Я так понимаю она должна добавлять найденную папку в общий путь. А ничего не происходит.

path каким был до этой строчки таким и остается
0
otx
06.02.2014, 02:29
Цитата Сообщение от OtyxPM
FAT, думаю, не даст в один директорий десять тысяч файлов сложить
Практически, в директории FAT32 количество файлов не ограничено, другое дело, что время поиска будет линейно расти. Но, насколько мне помнится, в описании от МС сказано об ограничении в 2^16 записей, при этом файлов может быть меньше.
ext2 в изначальной версии от увеличения времени поиска тоже не поможет, только после добавления HTree.

Цитата Сообщение от OtyxPM
если (а вдруг) Вам правда понадобится узнать, почему эти адреса не бред, а удобное решение для тонкого клиента
Цитата адресовалась не мне, но попробую предложить еще один вариант уплотнения. Одна запись занимает 0x20 байт (2^5). Если отбросить поддержку более крупных секторов и ограничить размер раздела 128 Гб (2^32 * 2^5), одним 32-битным значением можно однозначно определять файл, храня в нем номер кластера и номер первой записи LFN от начала этого кластера. Например, при кластере в 512 байт старшие 28 бит будут содержать номер кластера, младшие - номер записи в кластере; для кластера в 2048 байт старшие 26 бит - номер кластера, младшие 6 - номер записи.

Писал свой драйвер FAT32, подумываю об ext2.

Исправил расчет, добавил максимальный допустимый размер раздела.
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
06.02.2014, 12:13
попробовал заменить, sprymtf

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
if (fno.fattrib & AM_DIR) {
/* Это директория */
 
int result;
result = (strlen(fn) + strlen(path) + 1);
char rrr[result];
memset(rrr, 0, sizeof(rrr));
char oi[] = "/";
strcpy(rrr, path);
strcat(rrr, oi);
strcat(rrr, fn);
 
res = scan_files(rrr);
В отладчике 2 раза приходит сюда. А потом зарывается где то.
RRR - получается из склеивания path и fn. Передаю это значение на рекурсию. 1 раз переходит в новую директорию. А потом зарывается.

Если вписать значение RRR вручную (как первую точку для начала сканирования) то снова 2 папки сканирует и затыкается.

Не знаю уже что делать.
Никто не сканировал всю флешку ?

[207.98 Кб]
0
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 195
06.02.2014, 13:06
добавил стека - работает нормально.
Как мой быдлокод оптимизировать ? ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2014, 13:06

Файловый менеджер
Так и не нашла где создать тему, нужны исходники чего-то вроде файлового менеджера на VB6, к сожалению VBbook и planet-source отошли в мир...

Файловый Менеджер
Файловый Менеджер. Уважаемые форумчане буду премного благодарен. Распишите в модуле комментарии к функциям и методам.unit frFilePanelU; ...

файловый менеджер
Прошу дать информацию на работу с файлами (статьи, книги) в срр, точнее необходимо сделать что-то вроде файлового менеджера с функциями...

Файловый менеджер.
Здравствуй те программисты. вот в чем проблема, в институте нам дали задания дописать код программы 3 функциями, такие как "...

Файловый менеджер
Доброго времени суток.Прошу помощи с программкой,мне нужно написать простенький файловый менеджер,решил сделать через вкладку Samples,для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru