Accès concurrents à des fichiers

glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 - Modifié par glipper le 11/09/2016 à 15:24
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 12 sept. 2016 à 13:05
Bonjour,
Je voudrais développer un programme en C# qui fasse ceci:

- Pour chaque fichier déposé dans un répertoire ayant un nom correspondant à un certain pattern...
- On lit le contenu du fichier...
- On traite son contenu...
- Enfin, pour finir, si pas d'erreur, on déplace le fichier dans un autre répertoire.

Sur le principe, ça a l'air simple, mais je voudrais empêcher qu'un fichier puisse être lu deux fois, sachant que mon programme possédera plusieurs instances qui tourneront simultanément.
Comment puis-je faire ?

Quelques idées qui me viennent à l'esprit :

- à chaque fois qu'une instance prend un fichier, elle le renomme avant de commencer à travailler. Mais il y a un risque que le fichier soit renommé puis que le programme crash, auquel car le fichier ne sera jamais traité. De plus, deux instances pourraient essayer de renommer le fichier au même moment...
- utiliser la base de données (Oracle) pour synchroniser les différentes instances (sachant qu'elles ont toutes en commun la même base de données), mais je ne sais pas trop comment m'y prendre.

Auriez-vous une idée ?
Merci à vous,

1 réponse

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
11 sept. 2016 à 18:02
Bonjour

il y a plusieurs méthodes pour lire un fichier en C#, si tu utilises un stream, tant que le stream est ouvert aucun autre logiciel ne pourra accéder au fichier. Ça lève une exception que tu pourras intercepter pour passer au fichier suivant.
La probabilité que 2 instances ouvre un stream exactement au même moment est particulièrement faible.

Sinon, tu peux écrire un fichier dans le repertoire avec la première instance, elle se déclare "maitre" dans ce fichier, et tout autre instance doit lui demander quel fichier traiter et la tenir informée de l'avancée.
Une autre alternative, un de mes collègues avait trouvé un système de "chat" ou chaque instance peut s'abonner sur une "discussion" et échanger des info sur un thème. Je lui demande des infos sur le sujet.

0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
12 sept. 2016 à 13:05
0
Rejoignez-nous