File.position()

De ArduWiki
Revisión del 15:18 3 jul 2019 de Kike GL (Discusión | contribuciones) (Sintaxis)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Descripción

Retorna la posición actual del "cursor" del archivo. Si retorna 0 significa que se encuentra al inicio; si retorna el mismo valor de File.size() significa que se encuentra al final.

Sintaxis

File archivo = SD.open("archivo.txt", FILE_WRITE);
archivo.position();

Parámetros

Nada.

Retorna

La posición actual en bytes del "cursor", o -1 si la instancia representa un directorio/carpeta o archivo sin abrir. (unsigned long).

Advertencias

  • -1 en unsigned long equivale a 4294967295, lo cual puede resultar confuso si se está interactuando con un archivo cuyo tamaño alcanza el límite. En ese caso, se recomienda verificar directamente el tamaño y el estar abierto, con tal de salir de dicha confusión.

Comentarios

Se habla de un "cursor" posicionado en bytes porque la librería trata internamente los archivos como vectores/matrices de tipo byte, y con la posibilidad de crecer automáticamente según la necesidad.

Lo que hace esta función es retornar el índice (como el de un vector/matriz) actualmente en uso para la próxima lectura (File.read() o File.peek()) o escritura (File.write()/File.print()).

Ejemplo

// Así es como se retrocede una línea de texto
void retrocederLinea() {

  if (!archivo.position()) return; // No se puede retroceder si estamos al principio del archivo

  retrocede();
  if (archivo.peek() == '\r') retrocede(); // Esto se hace cuando el salto de línea se compone de dos caracteres

  while (archivo.position() && archivo.peek() != '\n') retrocede(); // Así es como se retrocede

  if (archivo.position()) archivo.read(); // Esto sucede solo si el comienzo de la línea NO es también el comienzo del archivo.
}

// Asumiendo que 'archivo' sea una variable global
bool retrocede() {
  return archivo.seek(archivo.position() - 1);
}

Vea también


Referencias