Технический форум по робототехнике.
Goldz » 18 июн 2011, 09:43
Появилась задача писать на SD файлы с определенной периодичностью
Имена совпадать не должны
Решил реализовать так
String dataString = "";
long xx=random(99999999);
dataString=String(xx);
dataString += ".txt";
Но проблема
Стандартная функция записи библиотеки SD
просит имя файла в структуре CHAR*
Дайте совет как преобразовать String в Char*
HarryStar » 18 июн 2011, 11:34
Вы бы хоть упомянули в каком компиляторе работаете.
Как правило, если стринг и чар не синонимы, то должна быть функция, которая представляет строку стринг в виде чара. Обычно это что то типа c_str()
И кстати метод формирования неповторяющегося имени у вас не очень. Как минимум надо ставить проверку, нет ли такого же и перегенерить, если есть. Лучше просто 1, 2, 3 и т.д. - повторяться точно не будут. Последний счетчик хранить в памяти например или там же на карте в отдельном файле типа index.txt
dccharacter » 18 июн 2011, 11:55
Строка - это нультерминированный массив байт. Т.е. имя переменной типа "строка" - это указатель на массив.
Если же это у тебя какое-нить QT, то надо позвать метод toByteArray()
Добавлено спустя 1 минуту 6 секунд:
const QChar * QString::constData () const
Returns a pointer to the data stored in the QString. The pointer can be used to access the characters that compose the string. For convenience, the data is '\0'-terminated.
Note that the pointer remains valid only as long as the string is not modified.
See also data() and operator[]().
Goldz » 18 июн 2011, 14:39
Пишу в Arduino-022
Добавлено спустя 35 минут 9 секунд:Лучше просто 1, 2, 3 и т.д. - повторяться точно не будут
1,2,3 и тд это int или long. Как их превратить в char*
Добавлено спустя 1 час 1 минуту 9 секунд:Получилось вот так
//Создание имя файла
String dataString = "";
long xx=random(99999999);
dataString=String(xx);
dataString += ".txt";
char buf[13];
dataString.toCharArray(buf,13);
CardWrite(buf);//вызов функции записи
Serial.println(buf);
void CardWrite(char* filename)//Создание и запись в файл
и т.д.
HarryStar » 18 июн 2011, 21:55
Ваш хх - это тоже лонг и в чар их надо превращать так же.
Отличие в том, что мой вариант дает гарантированно не повторяющиеся имена, а ваш - нет.
Strijar » 20 июн 2011, 10:59
Насколько я понял это на с++. На С было бы так:
char name[32];
int num = 0;
sprintf(name, "%i.txt", num++);
HarryStar » 20 июн 2011, 13:00
в этом плане С++ ничем не отличается. Там все также. Хотя я предложил ТС просто заменить 2-ю строку
с
- Код: Выделить всё • Развернуть
xx=random(99999999);
на
- Код: Выделить всё • Развернуть
xx++;
Strijar » 20 июн 2011, 13:54
HarryStar писал(а):в этом плане С++ ничем не отличается
Да я знаю, что не отличается - за скобками осталось "Нафига?"
Писать для AVR на ООП?