Я не уверен, что понял ваш вопрос.
- «Как реализовать
seekg
?» Нет seekg
. Существует, однако, seek
.
- Этот является страницей документации для библиотеки SD. В правой части страницы находится список всех методов класса
File
(среди прочих seek
).
- «Как прочитать последнюю строку ...» В вашем коде нет чтения строки. Если вы просто хотите перейти к концу файла, используйте:
SD_File.seek( SD_File.size() );
Если вы хотите прочитать последнюю строку, самый простой способ - написать функцию getline
и прочитать весь файл построчно до конца. Предполагая, что MAX_LINE
достаточно достаточно и getline
возвращает ноль в случае успеха:
//...
char s[ MAX_LINE ];
while ( getline( f, s, MAX_LINE , '\n' ) == 0 )
;
// when reaching this point, s contains the last line
Serial.print( "This is the last line: " );
Serial.print( s );
Вот идея getline
(без гарантии - не проверено):
/*
s - destination
count - maximum number of characters to write to s, including the null terminator. If
the limit is reached, it returns -2.
delim - delimiting character ('\n' in your case)
returns:
0 - no error
-1 - eof reached
-2 - full buffer
*/
int getline( File& f, char* s, int count, char delim )
{
int ccount = 0;
int result = 0;
if ( 0 < count )
while ( 1 )
{
char c = f.peek();
if ( c == -1 )
{
f.read(); // extract
result = -1;
break; // eof reached
}
else if ( c == delim )
{
f.read(); // extract
++ccount;
break; // eol reached
}
else if ( --count <= 0 )
{
result = -2;
break; // end of buffer reached
}
else
{
f.read(); // extract
*s++ = c;
++ccount;
}
}
*s = '\0'; // end of string
return ccount == 0 ? -1 : result;
}