Elegir ultimo fichero metido dentro de una carpeta en C++ Linux

Iniciado por nadales56, 10 Julio 2019, 08:42 AM

0 Miembros y 1 Visitante están viendo este tema.

nadales56

Buenos días!
Estoy implementando un programa que se dedica a leer los datos de un fichero que se encuentra en una determinada carpeta. La cosa es que cada mes, se genera un nuevo fichero al que acceder, lo que me obliga a cambiar el código para acceder al ultimo fichero que se ha generado.

Mi pregunta es; existe alguna forma de que mi programa sea capaz de estar a la espera de encontrar un nuevo fichero dentro de la misma ruta con idea de que automáticamente, los datos que necesito sacar de dichos ficheros se actualicen sin necesidad de que cada mes tenga que cambiar el código.

Muchas gracias de antemano! Un saludo

@XSStringManolo


nadales56

Muchas gracias!
Pero sabes si hay algo menos complicado o lioso que pueda usar?
se me ha olvidado decir que el entorno en el que estoy programando es Codeblocks

avesudra

Si puedes usar C++17, puedes utilizar std::filesystem y la función:

https://en.cppreference.com/w/cpp/filesystem/last_write_time

Con eso puedes mirar todos los archivos que tiene el directorio, sacar su última fecha de modificación y ordenarlos quedándote con el que te interese.

Si no puedes usar C++17, puedes usar la biblioteca boost:

https://www.boost.org/doc/libs/1_70_0/libs/filesystem/doc/reference.html

Que se parece mucho a la de C++17.

Saludos.
Regístrate en

dijsktra

Cita de: nadales56 en 10 Julio 2019, 08:42 AM
Buenos días!
Estoy implementando un programa que se dedica a leer los datos de un fichero que se encuentra en una determinada carpeta. La cosa es que cada mes, se genera un nuevo fichero al que acceder, lo que me obliga a cambiar el código para acceder al ultimo fichero que se ha generado.

Mi pregunta es; existe alguna forma de que mi programa sea capaz de estar a la espera de encontrar un nuevo fichero dentro de la misma ruta con idea de que automáticamente, los datos que necesito sacar de dichos ficheros se actualicen sin necesidad de que cada mes tenga que cambiar el código.

Muchas gracias de antemano! Un saludo
A lo mejor no estás planteando el problema con la tecnología adecuada. Me explico: por qué programar un complejo programa C con llamadas complejas a API cuando todo esto se puede hacer con los comandos de la shell, ya que la pregunta original se refiere a Linux


A ver que te parece este pequeño scrpipt.


#!/bin/sh
TARGET_DIR=$HOME  # Change to your choice, i.e. "/tmp/log"
LAST_MODIFIED=$(stat -c "%Y %n" $TARGET_DIR/* | sort | cut -d ' ' -f 2 | tail -1)
echo $LAST_MODIFIED


Esto detecta el ultimo fichero modificado en un directorio. Si lo quieres hacer periódicamente cada mes, lo mejor es integrarlo el servicio cron .  No puedo desbribir aquí como va, (dale a man cron)

Finalmente, llega tu programa original, el que tiene que procesar el fichero detectado. En lugar de hacer echo, invocas tu programa pasando el fichero por parámetro, sin cambiarlo.

#!/bin/sh
TARGET_DIR=$HOME  # Change to your choice, i.e. "/tmp/log"
LAST_MODIFIED=$(stat -c "%Y %n" $TARGET_DIR/* | sort | cut -d ' ' -f 2 | tail -1)
myprogram $LAST_MODIFIED


Si puede valer....
Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)