Probleme pour ouvrir un fichier par plusieurs processus

Résolu
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 - 15 sept. 2006 à 11:22
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 - 15 sept. 2006 à 18:54
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

bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
15 sept. 2006 à 18:54
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>
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
15 sept. 2006 à 12:34
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
0
bossun Messages postés 173 Date d'inscription lundi 3 mars 2003 Statut Membre Dernière intervention 15 décembre 2010 1
15 sept. 2006 à 13:21
ç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>
0
Rejoignez-nous