Редактирование файла на microSD

Вот тут вы очень верное место жирным выделили, хотя и не понимаете этого. У вас в этой строке определена НОВАЯ переменная с, локальная для цикла while. И с выходом из этого цикла эта переменная перестает существовать. Раз код все-таки компилируется, то очевидно существует другая, глобальная переменная с, которую вы и присваиваете элементу буфера. Но значение в ней совершенно другое, не то что считано из файла.

без шансов. Смотри внимательно, обьяснение выше. И остальные куски кода не лучше. Это не код, а полная помойка.

Вы показали кусок кода, который только считывает значение из файла. Лучше покажите, как вы его перезаписываете.




ослепли что ли:

int editValue(const char *section_name, const char *key_name, const char *new_value) {

@b707 , в скобках не обсчитались? В 9 строке твоего кода скобка } не от while а только от if.
По крайней мере с переменной “c” вроде всё так. В подробности с буфером не вникал.

по крайней мере я хоть что то сделал, и оно работает, и не просто строю из себя ГУРУ, а делаю, а не языком как помелом мету. Если Вам что_то не нравится, предложите лучше, а так получается на “Словах Лев Толстой, а на деле…” . Всего доброго!

Да b707 что то не туда понесло.

Может быть имеет смысл указать требования к формату файла, которые позволяют обновлять значения более длинными строками.

Твой говнокод надо отсюда немедленно удалить

Код перезаписи не смотрел.
Однако переписать строку на более длинную, не сдвигая остального файла - НЕВОЗМОЖНО В ПРИНЦИПЕ. Где у вас логика, неужели вы этого не понимаете?
У вас, случаем, это значение в файле не последнее? :slight_smile: Это бы обьяснило, почему этот код якобы “работает”.

1 лайк

обсчитался, да

Наверное хамство заразное, или очень привлекательное.
Помню когда я зарегистрировался на этом форуме пару лет назад, DetSimen спрашивал у главного -“Нужно ли нам грамотное, но хамло на форуме?”. Вероятно ответ был “Да и побольше”.

@Komandir @kalapanga
Ок, пусть со скобками я обсчитался и с символом c все нормально. Но код все равно кривой до жути.
Вот смотрим на этот кусок:

    byte buff_size = 80;
char buffer[buff_size];
int buffer_pos = 0;
while (_File.available()) {
  char c = _File.read();
  if (c == '\r') {
          continue;
        }
  buffer[buffer_pos++] = c;
  if (c == '\n' || buffer_pos == buff_size - 1) {

В каких случаях последнее условие может оказаться истинным? Вторая часть, очевидно, не сработает никогда, потому что buffer_posу нас всегда 1,а buff_size - 1 всегда 79
Теперь смотрим первую часть - c == '\n' - поскольку условием выхода из предыдущего цикла while является либо равенство символа c значению \r , либо конец файла - значит условие может сработать в том единственном случае, когда мы дошли до конца файла и файл кончается на \n.

То есть секция, в которой меняется значение, обязательно должна быть последней и никак иначе.
Или я опять где-то что-то проглядел?

Нууу, теперь твоя очереть спрашивать.

Это как так то - он же инкрементируется в while ? Может забухать пора ?

О. плять… я продолжаю считать, что цикл while кончается на скобке от If

Ок, пусть тогда нейросети программируют.

Пойду слушать “В Питере пить” - самая подходящая песня под момент.

@Soyer
у вас все хорошо. Только почему-то буквы задвоились в значении SSID… но это же неважно, главное “работает”

Ну слава богу - РАЗОБРАЛИСЬ …

Пока удалял Serialprint’ы случайно снес одну строку, позже подправлю.

Когда достигнут конец строки, либо строковый буфер переполнен, проверяются дальнейшие условия. Я не стал вводить в аргументы длину буфера, и делать его больше, для меня 80 символов в строке хватает.