Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nadales56 en 10 Julio 2019, 08:42 am



Título: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
Publicado por: 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


Título: Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
Publicado por: @XSStringManolo en 10 Julio 2019, 09:19 am
https://en.m.wikipedia.org/wiki/Inotify

https://www.stev.org/post/linuxprogrammingusinginotifyfordetectingfilemodifications

Tienes una libreria en QT multiplataforma que también te lo permite.

Tambien puedes optar por usar llamadas al sistema/bash


Título: Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
Publicado por: nadales56 en 10 Julio 2019, 10:30 am
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


Título: Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
Publicado por: avesudra en 10 Julio 2019, 13:17 pm
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.


Título: Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
Publicado por: dijsktra en 19 Julio 2019, 11:26 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.

Código:
#!/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.
Código:
#!/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....