Es la primera vez que publico un post. Estoy realizando un proyecto en el cual gestiono archivos en una SD junto a un NodeMCU. el nombre del archivo es un numero secuencial... Para escribir la fecha de modificación utilice la función de SdFat..
void dateTime(uint16_t* date, uint16_t* time)
{
RtcDateTime currentTime = rtcObject.GetDateTime(); //Obtiene la hora y fecha
*date = FAT_DATE(currentTime.Year(), currentTime.Month(), currentTime.Day());
*time = FAT_TIME(currentTime.Hour(), currentTime.Minute(), currentTime.Second());
}
Haciendo el llamado:
SdFile::dateTimeCallback(dateTime);
Hasta este punto logro crear un archivo y visualizar la fecha de creación sin problemas..
Me gustaría realizar una búsqueda de cualquier archivo escribiendo la fecha de modificación (el atributo del archivo).. Es posible eso? He estado buscando pero no encuentro información al respecto, las busquedas que he encontrado son por el nombre del archivo (muchas personas colocan de nombre de archivo la fecha, pero en mi caso no puedo porque necesito ocupar los 8 espacios del nombre de la SD). Es muy probable que este realizando mal la búsqueda pero me gustaría consultar si alguien ha realizado algo similar.
Existe un trabajo hecho por @noter en la sección Documentación donde aprovechó la EDB Extended Data Base disponible para SD, EEPROM, Flash, etc donde agrego un modo de indexación para los archivos.
Porque no lo consultas a ver si ayuda a solucionar tu problema?
Revise el post y es bastante interesante pero por lo que entiendo y corrija si me equivoco.. trabajan con un archivo en especial y hacen búsquedas, modificaciones dentro del contenido del archivo, y otras cosas mas pero dentro del archivo, a mi me gustaría trabajar con los atributos del archivo (específicamente la fecha de modificación).
El contenido del archivo es estático para mi, no le hago otra modificación después de ser creado.
Realmente el post es bastante útil.. Solo que no he logrado aplicarlo bien, creo que tengo problemas de concepto y eso me tiene confundida..
Ellos hacen referencia a trabajar con la estructura directoryEntry de la siguiente manera:
struct directoryEntry dirent;
// myDir has already been opened and points at the start of your dir
while (myDir.read((uint8_t *)&dirent, sizeof(struct directoryEntry))) {
// Names are tricky to print. Also you should check for deleted files here.
Serial.print("Name: ");
for (int i = 0; i < 11; i++) {
Serial.print(dirent.name[i]);
if (i == 7) {
Serial.print(".");
}
}
Serial.println();
Serial.print("Creation Time: ");
Serial.println(dirent.creationTime);
Serial.print("Creation Date: ");
Serial.println(dirent.creationDate);
}
Al ingresar en mi programa estas lineas de código la salida que me genera es:
El nombre del archivo es: 5kF
Writing...
Name: 729132640000.23230
Creation Time: 65263
Creation Date: 27445
done.
El nombre de archivo que estoy generando es 5kF pero el nombre que me dice la rutina es 729132640000.23230, esta leyéndolo mal y la fecha de creación no tiene sentido para mi..
En mi código lo inserte de la siguiente manera, solamente mostrare el fragmento:
SdFile::dateTimeCallback(dateTime);
myFile = SD.open(szNombre, FILE_WRITE);
if (myFile) {
Serial.print("Writing...");
myFile.println(szDato);
struct directoryEntry dirent;
// myDir has already been opened and points at the start of your dir
while (myDir.read((uint8_t *)&dirent, sizeof(struct directoryEntry))) {
// Names are tricky to print. Also you should check for deleted files here.
Serial.print("Name: ");
for (int i = 0; i < 11; i++) {
Serial.print(dirent.name[i]);
if (i == 7) {
Serial.print(".");
}
}
Serial.println();
Serial.print("Creation Time: ");
Serial.println(dirent.creationTime);
Serial.print("Creation Date: ");
Serial.println(dirent.creationDate);
}
// cerrando el archivo
myFile.close();
Serial.println("done.");
}
No se si puedan ver el detalle o si necesitan mas información, de antemano gracias.
Cuando pase eso recurre a búsquedas en inglés u otros idiomas
Gracias por el aporte y la recomendación de buscarlo en otros idiomas, había buscado en ingles también pero no toque ese post.