Menu

Détécter l'arrivée d'un fichier

CatEndal 39 Messages postés samedi 25 mars 2017Date d'inscription 3 mai 2018 Dernière intervention - 7 août 2017 à 22:08 - Dernière réponse : CatEndal 39 Messages postés samedi 25 mars 2017Date d'inscription 3 mai 2018 Dernière intervention
- 20 août 2017 à 20:35
Bonjour,
Je débute en c++ et j'aimerai savoir comment détecter l'arrivée d'un fichier dans un dossier. J'ai essayé avec ifstream en utilisant la condition if(fichier) et une boucle while, seulement voilà, sa ne marche pas lorsque je copie le fichier en question quand le programme est lancé, mais uniquement si le fichier était déjà dans le dossier avant le lancement du programme.
Donc voilà, j'aimerai pouvoir remédier a ce problème
merci.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
mamiemando 28452 Messages postés jeudi 12 mai 2005Date d'inscriptionModérateurStatut 21 juillet 2018 Dernière intervention - Modifié par mamiemando le 18/08/2017 à 10:28
1
Merci
Bonjour

Une boucle while va malheureusement conduire à utiliser 100% de ton CPU en permanence, car tu vas en permanence examiner si le répertoire a été modifié. Dans ton cas il faudrait plutôt que le programme réagisse quand le répertoire est modifié. Réagir à un événement conduit à la programmation asynchrone.

Il existe plusieurs manières de faire de la programmation asynchrone :
- epoll sous linux
- kqueue sous freebsd
- des fonctions spécifiques à windows
- utiliser une librairie comme libevent ou la GLib, permettant de s'affranchir du système.

Quelle que soit la solution adoptée, il faut se familiariser avec des notions comme les boucles d'évenements, les callbacks etc...

Dans ton cas, je partirais sur la GLib propose des classes qui permettent d'écrire ce genre de programme. En particulier, dans ton cas, la structure qui t'intéresse est :
https://developer.gnome.org/gio/stable/GFile.html#g-file-monitor-directory

Malheureusement, la GLib nécessite de se familiariser avec la programmation asynchrone et les boucles d'événements (GMainLoop). La documentation est bien faite, mais il y a très peu d'exemples sur Internet, ce qui rend la librairie pas forcément simple à prendre en main.

Voici toutefois quelques exemples qui illustrent un peu leur utilisation :
http://develissimo.com/forum/topic/93276/
http://db0fhn.efi.fh-nuernberg.de/~dg8ygz/Linux_Source/cheese-2.30.1/src/cheese-thumb-view.c

Bonne chance

Merci mamiemando 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22594 internautes ce mois-ci

CatEndal 39 Messages postés samedi 25 mars 2017Date d'inscription 3 mai 2018 Dernière intervention - 20 août 2017 à 20:35
merci, je vais voir ça
Commenter la réponse de mamiemando