Probleme pour ouvrir un fichier par plusieurs processus [Résolu]

Signaler
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
salut,

Je cherche à acceder à un meme fichier par 2 processus différents en meme temps... je voudrais que le premier puisse l'ouvir en lecture ecriture... tandis que le second (et tous les autres) seulement en lecture...

J ai vu la classe FileStream mais je ne sais pas comment parametrer mon objet...

J'ai bien essayé de spécifier le FileShare à toutes les valeurs mais il me laisse toujours pas faire...

voilà mon code:

try{

_LayoutStream =

File.Open(filepath,
FileMode.Open,
FileAccess.ReadWrite,
FileShare.Read);_ReportParameters = (

LayoutSerialization)BF.Deserialize(_LayoutStream);

}

catch (
IOException ex){

_LayoutStream =

File.Open(filepath,
FileMode.Open,
FileAccess.Read,
FileShare.Read);_ReportParameters = (

LayoutSerialization)BF.Deserialize(_LayoutStream);

MessageBox.Show(
"Ce rapport est en lecture seule car il est déjà ouvert par un autre utilisateur");}

Le premier process ouvre sans probleme le fichier... le second echoue et je ne sais pas comment faire...

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>

3 réponses

Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
Voilà la solution:


 



FileStream fs = File.Open(@"C:\test.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
FileStream fs2 = File.Open(@"C:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);







 




Bossun




P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
17
le plus simple serait que tes process ouvrent le filestream, stockent le contenu du stream dans un MemoryStream/BufferStream en fermant le fileStream. si tu es ouvert en lecture seule, pas de probleme, ton fichier est lu comme il faut (mais tu n'aura pas les mises a jour sans coder plus).
si tu es en ecriture, tu flush régulièrement ton stream dans un fichier temporaire qui ecrasera lancien fichier a la fermeture de ton stream.
si tu veux etre notifié des mises a jour du fichier, soit tu décide du nom du fichier temporaire, et tu utilise un filesystemwatcher sur ce fichier, lorsque le process qui ecrit a finit son ecriture, il ferme le filestream, les process en lecture récupèrent les changements et ferment a leur tour.
Apres a toi de gérer les ressources afin que tout le monde n'essaie pas d'accéder en meme temps au fichier pour récupérer les données en lecture....

si qqun a une solution plus simple, je laisse proposer, mais la comme ca, je vois pas vraiment d'autre solutions
Messages postés
173
Date d'inscription
lundi 3 mars 2003
Statut
Membre
Dernière intervention
15 décembre 2010
1
ça me sembles plutot barbare cette solution.. mais je vais la tester...

Bossun

P.S1  C'est mieux de prendre son pied que de se prendre la tête!

/F< body>