У меня есть 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