У меня есть функция, которая открывает файл с SD-карты, использует размер файла для установки размера буфера, записывает блок информации в этот буфер, а затем что-то делает с этой информацией, как показано в этом коде:
char filename = "filename.txt";
uint16_t duration;
uint16_t pixel;
int q = 0;
int w = 0;
bool largefile;
File f;
int readuntil;
long large_buffer;
f = SD.open(filename);
if(f.size() > 3072) {
w = 3072;
} else {
w = f.size();
}
uint8_t buffer[w];
while(f.available()) {
f.read(buffer, sizeof(buffer));
while(q < sizeof(buffer)) {
doStuffWithInformation(buffer[q++]);
}
q=0;
}
f.close;
Это прекрасно работает с файлами меньшего размера, но с объемом жесткого буфера, превышающим 3072 (к которому я пришел опытным путем, это просто объем памяти, который можно безопасно выделить для этой функции),сталкивается с проблемой.Большие файлы читаются нормально до тех пор, пока они не достигнут последнего цикла while(f.available())
, где они читают конец файла, но затем продолжают чтение буфера, конец которого заполняется данными из последнего цикла, которые не были перезаписаныпо последним f.read()
.Как я могу убедиться, что последний цикл функции while(f.available())
работает только с информацией, записанной в буфер во время текущего цикла?Моя единственная идея сейчас состоит в том, чтобы определить факторы размера файла и установить размер буфера как самый большой фактор меньше 3072, но это кажется интенсивным, чтобы запускаться каждый раз, когда вызывается эта функция.Есть ли элегантное решение, которое смотрит мне в лицо?