J'ai deux modules différents qui nécessitent un accès à un seul fichier (on aura une lecture en lecture en lecture-d'une autre lecture uniquement). Le fichier est ouvert à l'aide du code suivant dans l'un des modules:
FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read);
3 Réponses :
Vous devez utiliser le fichier filtreamname.open (); et leameamname.close (); commande lors de l'utilisation de 2 filestreams qui lisent / écrivez dans le même fichier, car vous ne pouvez pas lire et écrire à un fichier de manière asynchrone. p>
Lors de l'ouverture du second filtream code>, vous devez également spécifier
fileshare.read code>, sinon il tentera de l'ouvrir avec un accès exclusif et échouera car le fichier est déjà ouvert p>
Essayé cela, mais cela n'a pas fonctionné: filtream fs = nouveau filtream (@ "D: \ post.xml", filemode.open, fileaccess.read, fileshare.read);
sur le fichier filtre qui lit uniquement le fichier, vous devez la définir comme
Autre sage L'original FileStream ne pourrait pas y écrire ... c'est juste une volée d'une volée entre les deux ruisseaux, assurez-vous de remettre en arrière ce que les autres besoins p> p> fileshare.readwewrite code> p>
+1: OK ça a fonctionné mais je ne sais pas pourquoi. Le premier filtre-père sera-t-il capable d'économiser pendant que le second est ouvert?
Avec un test rapide, j'ai pu écrire au premier puis fermer le flux pendant tout pendant que l'autre était ouverte et que la déclaration de statut Canreade est-elle vraie .... Sans comme ça, oui
Notez que même si vous ouvrez en filaccess.Lead, vous devez spécifier le fichier FileShare.Readwrite, si un autre l'a ouvert déjà avec FileShare.Readwewewrite déjà. Tous les filestreams doivent avoir le même mode FileShare.