elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux  (Leído 2,797 veces)
nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
« 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


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
« Respuesta #1 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


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

nadales56

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
« Respuesta #2 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
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
« Respuesta #3 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.
En línea

Regístrate en
dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Elegir ultimo fichero metido dentro de una carpeta en C++ Linux
« Respuesta #4 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....
En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines