Accès concurrents à des fichiers

Signaler
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
-
Messages postés
16032
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
-
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,
A voir également:

1 réponse

Messages postés
16032
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
551
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.

Messages postés
16032
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
13 juin 2021
551