Не закрывается файл на SD карте

glags
Offline
Зарегистрирован: 10.07.2012

Помогите кто силён в этом.

Написал прогу чтения каталога с SD карты с последующим выводом его на экран LCD. После выбора и открытия файла, при повторном чтении каталога, на дисплей выводяться только имена тех файлов что следуют после открытого.

Процедура начинается так:

                             file.close();
                             i=printDir(); //количество файлов на карте с выводом каталога
                             epprom=0;
                             file.close();

далее в С номер нужного нам файла

                             name=printDirname(c);
                             file = SD.open(name);  //Имя открываемого файла

И собственно подпрограммки:

вывод на экран каталога(на выходе количество файлов на SDшке)

                       int   printDir() {
                             File dir=SD.open("/");
                             key=0;
                             LCD.print("Input:",0,0);
                             while(true) {
                             file =  dir.openNextFile();
                             if (!file) {
                               // Больше файлов не осталось
                             file.close();
                             dir.rewindDirectory();
                             return(key);}
                             LCD.printNumI(key,10,(key+1)*11);
                             LCD.print(")",25,(key+1)*11);
                             LCD.print(file.name(),38,(key+1)*11);
                             LCD.printNumI(file.size()/1000,140,(key+1)*11);
                             file.close();
                             key++;
                              }
                            }

получение имени по номеру файла

                      char* printDirname(int i) {
File dir=SD.open("/");
                            key=0;
                            while(true) {
                            file =  dir.openNextFile();
                            if (key==i) {
                            char* name=file.name();
                            file.close();
                            dir.rewindDirectory();
                            return(name);}
                            key++;
                             }
                           }

Помогите пожалуйста, если сможите. Мне это очень важно.

glags
Offline
Зарегистрирован: 10.07.2012

На этом форуме, кто-то может мне помочь? Хотябы админ откликнулся. Дайте хотябы ссылку где можно про это подчитать. :)

maksim
Offline
Зарегистрирован: 12.02.2012

Пока вы выкладываете какие-то непонятные куски кода, да и еще не в читабельном виде наврядли кто-то вам поможет. Выложите ВЕСЬ код в нормальном виде и тогда думаю кто-нибудь откликнется...

glags
Offline
Зарегистрирован: 10.07.2012

                             
//Основная точка вызова
                             file.close();
                             i=printDir(); // вызов процедуры подсчёта количества файлов на карте с выводом каталога
                             file.close();

//далее следует программа ввода номера файла и присваивание его переменной С номер нужного нам файла

                             name=printDirname(c); //Вызов процедуры получения имени файла по номеру
                             file = SD.open(name);  //Открытее файла

//И собственно подпрограммки:

                       int   printDir() { //процедура подсчёта количества файлов на карте с выводом каталога
                             File dir=SD.open("/");
                             key=0;
                             LCD.print("Input:",0,0);
                             while(true) {
                             file =  dir.openNextFile();
                             if (!file) {
                               // Больше файлов не осталось
                             file.close();
                             dir.rewindDirectory();
                             return(key);}
                             LCD.printNumI(key,10,(key+1)*11);
                             LCD.print(")",25,(key+1)*11);
                             LCD.print(file.name(),38,(key+1)*11);
                             LCD.printNumI(file.size()/1000,140,(key+1)*11);
                             file.close();
                             key++;
                              }
                            }

                      char* printDirname(int i) { //получение имени по номеру файла
                            File dir=SD.open("/");
                            key=0;
                            while(true) {
                            file =  dir.openNextFile();
                            if (key==i) {
                            char* name=file.name();
                            file.close();
                            dir.rewindDirectory();
                            return(name);}
                            key++;
                             }
                           }

Вроде переделал. Весь код программы нет смысла выводить (очень большой). Вот моя ася 494002996, если можно помогите!!!