Работа с SD карточкой.

sokos
Offline
Зарегистрирован: 14.11.2011

Подскажите как правильно создать следующую структуру папок на SD карте:

  • В корневой папка с годами
  • В папке с годами - папки с месяцами
  • В папке с месяцами - папки с днями

Пробывал следующий код - не могу нормально перевести числа в символы:

int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(int y=2000;y=2011;y++){
for(int m=1;m=12;m++){
for(int d=1;d=days[m-1];d++){
if SD.exists(y+'/'+m+'/'+d) {Serial.print("Существует");}
}
}
}

 Проблема с "(y+'/'+m+'/'+d)" как правильно перевести это в строку?

 

step962
Offline
Зарегистрирован: 23.05.2011
char sbuf[12]; // буфер должен быть длиной не менее 10 символов плюс завершающий нуль.

sprintf(sbuf,"%04d/%02d/%02d",y,m,d);

 

В sbuf получите строки типа "2011/11/09", т.е. с ведущими нулями - это то, что вы хотите?

Кроме того, строку

for(int y=2000;y=2011;y++){

перепишите как
for(int y=2000;y<=2011;y++){

иначе рискуете вываливаться из цикла после первого прохода (если он вообще будет исполняться. К двум другим циклам это, естественно, тоже относится

sokos
Offline
Зарегистрирован: 14.11.2011

Спасибо, выкладываю рабочий код. Проблема решена.


int days[12]  = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 char sbuf[10]; 
  for(int y=2000;y<=2011;y++){
  for(int m=1;m<=12;m++){
  for(int d=1;d<=days[m-1];d++){
  sprintf(sbuf,"%04d/%02d/%02d",y,m,d);
  if(SD.exists(sbuf)){} else {SD.mkdir(sbuf);}
  } 
  }
  }

 

step962
Offline
Зарегистрирован: 23.05.2011

Занудствуя до победного конца хочу предложить заменить строку

  if(SD.exists(sbuf)){} else {SD.mkdir(sbuf);}

на

  if(!SD.exists(sbuf)) SD.mkdir(sbuf);