Accès concurrents à des fichiers

glipper 246 Messages postés dimanche 2 juin 2002Date d'inscription 11 septembre 2016 Dernière intervention - 11 sept. 2016 à 15:22 - Dernière réponse : Whismeril 11618 Messages postés mardi 11 mars 2003Date d'inscription 17 juin 2018 Dernière intervention
- 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,
Afficher la suite 

Votre réponse

2 réponses

Whismeril 11618 Messages postés mardi 11 mars 2003Date d'inscription 17 juin 2018 Dernière intervention - 11 sept. 2016 à 18:02
0
Merci
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.

Whismeril 11618 Messages postés mardi 11 mars 2003Date d'inscription 17 juin 2018 Dernière intervention - 12 sept. 2016 à 13:05
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.