ESP32 - SPIFFS - Копирование файлов с ограниченным количеством регистров - PullRequest
0 голосов
/ 17 марта 2020

У меня есть SPIFFS, который должен записывать конечное число регистров (8640). Поскольку режим «FILE_WRITE» стирает содержимое только для записи в позиции поиска, я предложил «режим копирования», чтобы я мог скопировать весь файл без 1-й строки и добавить в конец файла. новый контент. Но поведение системы показывает мне, что когда я копирую файл, он только помещает tra sh в файл до последнего регистра, который хранится правильно.

Sketch:

class FileBlockRegister
{
  public:
    byte dia, mes, hora, minuto, segundo, byteControl1, byteControl2;
    int ano, pAtiva, pReativa;
};

int writeLastReg(FileBlockRegister fb, FileBlockRegister *fbTemp, int numReg)
{

  Serial.print(numReg);
  if (numReg == 8640)
  {
    File original = SPIFFS.open(lastReg, "r");
    String name_ = original.name();
    Serial.println(name_);
    if (!original)
    {
      Serial.print("- failed to open file ");
      Serial.println(lastReg);
    }
    else
    {
      Serial.print("- DELETING FROM FILE ");
      Serial.println(lastReg);
      //We skip the first line
      original.seek(sizeof(FileBlockRegister));
      File temporary = SPIFFS.open(tempFile, "a+");
      {
        while(original.available())
        {

          Serial.printf("Pointer: %d \n" , temporary.position());
          Serial.printf("Size: %d \n" , temporary.size());
          original.read((uint8_t*)fbTemp, sizeof(*fbTemp));
          temporary.write((uint8_t*)&fbTemp, sizeof(*fbTemp));
          Serial.printf("Pointer: %d \n" , temporary.position());
          Serial.printf("Hora: %d, Minuto: %d, Segundo: %d \n", fbTemp->hora, fbTemp->minuto, fbTemp->segundo);


        }
        Serial.println("Saindo da Cópia");
        Serial.println(temporary.size() / sizeof(*fbTemp));
       temporary.close();
      }

      original.close();

      SPIFFS.remove("/lastReg.db");
      SPIFFS.rename("/temporary.db", "/lastReg.db");
    }
  }
  int retorno;
  Serial.println("Append");
  File file = SPIFFS.open(lastReg, "a+");
  if (!file)
  {
    retorno = 2;
  }

  if (file.write((uint8_t *)&fb, sizeof(fb)))
  {
    retorno  = 1;
  }

  else
  {
    retorno = 0;
  }
  file.close();
  return retorno;
}

Отладочные сообщения:

08:54:25.337 -> 3/lastReg.db
08:54:25.337 -> - DELETING FROM FILE /lastReg.db
08:54:26.043 -> Pointer: 0 
08:54:26.043 -> Size: 20 
08:54:26.043 -> Pointer: 20 
08:54:26.081 -> Hora: 252, Minuto: 63, Segundo: 17 
08:54:26.115 -> Pointer: 20 
08:54:26.115 -> Size: 20 
08:54:26.115 -> Pointer: 40 
08:54:26.157 -> Hora: 8, Minuto: 52, Segundo: 33 
08:54:26.157 -> Saindo da Cópia
...