Открыть файл на SD, если имя файла находится в переменной

Тема в разделе "Arduino & Shields", создана пользователем DS2015, 1 май 2015.

  1. DS2015

    DS2015 Нерд

    Всем доброго дня!
    Пытаюсь сделать это (САБЖ) с помощью стандартной библиотеки SD,
    но там такая конструкция SD.open("NameFile", FILE_WRITE); не понимает переменных.
    Пробовал подключить SdCard.h - не смог. :(
    Кто решал подобную проблему, подскажите, плиз....
     
  2. dnk

    dnk Нерд

    А как Вы определяете и затем передаете переменную в функцию open?

    Код (Text):

      char filename[] = "filename.txt";
      File f = SD.open(filename);
     
    или так?

    Код (Text):

      String filename = "filename.txt";
      File f = SD.open(filename.c_str());
     
     
  3. DS2015

    DS2015 Нерд

    Пытался делать так:
    String year, month, day, hour, minute, second, time, date;
    ......
    Тут получаем данные от часов и переводим их в строки таким образом:
    month = String(datetime.month(), DEC);
    ......
    String STR = hour + minute + day + month + ".txt";
    myFile = SD.open(STR, FILE_WRITE);

    Не работает....
    Сегодня попробую по-Вашему!
     
  4. DS2015

    DS2015 Нерд

    В итоге заработало!!!
    Работающая конструкция выглядит так:

    String filename = day + hour + minute + second + ".txt";
    myFile = SD.open(filename.c_str(), FILE_WRITE);

    Большое спасибо и лучи поддержки в сторону dnk!
     
    Tomasina нравится это.
  5. Почему такая конструкция работает:

    String filename1 = String(day() , DEC)+ String(month() , DEC) + String(year() , DEC) + ".TXT";

    File f1 = SD.open(filename1.c_str(), FILE_WRITE);

    А такая - НЕТ:

    String filename1 = String(day() , DEC) + "." + String(month() , DEC) + "." + String(year() , DEC) + ".TXT";

    File f1 = SD.open(filename1.c_str(), FILE_WRITE);

    ???
     
    Последнее редактирование: 23 сен 2017
  6. DetSimen

    DetSimen Guest

    в имени файла должна быть только одна точка. Остальные замени на '_'
     
  7. Почему вот так работает:
    String filename = String(day() , DEC) + '_' + String(month() , DEC) + String(year() , DEC) + ".TXT"; ???
    А вот так нет (ФАЙЛ НЕ СОЗДАЕТСЯ).
    String filename = String(day() , DEC) + '_' + String(month() , DEC) + '_' + String(year() , DEC) + ".TXT";
    Нельзя использовать два символа подчеркивания?
     
  8. b707

    b707 Гуру

    Какое имя файла получается - 28_9_2017.txt ?
    То есть файл 28_92017.txt создается, а 28_9_2017.txt - нет?
    А подумать? :))))
     
  9. DIYMan

    DIYMan Guest

    Дело не в этом - гуглить формат 8.3. Ну или - подумать, ещё раз, прописью: "восемь, точка, три".
     
  10. b707

    b707 Гуру

    через 2 недели и первый метод перестанет работать
     
  11. oKAY, про 8.3 понял. А кто то может способ подкинуть, как создать файл с именем более восьми символов?
    Тут наткнулся на библиотеку sdFat master, но так как в универе плохо учился, разобраться не смог), но она точно умеет с длинными именами работать.
     
  12. Igor68

    Igor68 Гуру

    Простите за вмешательство вам лучше всё-таки формат 8.3 применять без расширения имени. Увеличение имени более 11 приведёт только к одной записи в каталоге размером более 32 байт(но кратное 32)... то есть 64 и более байт только на место в каталоге. Учтите, что каталог обычно читается в буфер. А у Вас ОЗУ воз и маленькая тележка? Вот описание:
    fatgen103-rus.doc.zip
     

    Вложения:

  13. b707

    b707 Гуру

    Попробуйте обосновать, зачем вам обязательно нужно более 8=ми символов? Любое имя файла можно сократить до формата 8.3
     
  14. ratman

    ratman Нерд

    Библиотека SDFat вроде как позволяет длинные имена, но сам не пробовал.
     
  15. Igor68

    Igor68 Гуру

    Жил был у бабушки серенький козлик.doc (где-то 5-6 записей по 32 байт каждый в каталоге похоже вам надо такие имена, а 041017.doc (число месяц год) непригодно.