10
votes

Filtream: utilisé par une autre erreur de processus

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);


0 commentaires

3 Réponses :


0
votes

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.


0 commentaires

1
votes

Lors de l'ouverture du second filtream , vous devez également spécifier fileshare.read , sinon il tentera de l'ouvrir avec un accès exclusif et échouera car le fichier est déjà ouvert


1 commentaires

Essayé cela, mais cela n'a pas fonctionné: filtream fs = nouveau filtream (@ "D: \ post.xml", filemode.open, fileaccess.read, fileshare.read);



32
votes

sur le fichier filtre qui lit uniquement le fichier, vous devez la définir comme

fileshare.readwewrite xxx

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


3 commentaires

+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.