Comment puis-je lire un fichier, même quand on est un “en cours d'utilisation par un autre processus” d'exception?
Dans VB.NET ou C#, je suis en train de lire le contenu d'un fichier texte qui est en cours d'utilisation par un autre programme (c'est le point, en fait, je ne peux pas arrêter le programme ou qu'il arrête d'écrire dans le fichier texte, et je veux lire régulièrement ce qui est actuellement dans le fichier texte dans un autre programme).
C'est le code que j'utilise (VB.NET)
Dim strContents As String
Dim objReader As StreamReader
objReader = New StreamReader(FullPath)
strContents = objReader.ReadToEnd()
objReader.Close()
Ou en C#:
var objReader = new StreamReader(FullPath);
var strContents = objReader.ReadToEnd();
objReader.Close();
Ci-dessus, cependant, jette le IO exception "Le processus ne peut pas accéder au fichier 'file.txt" parce qu'il est utilisé par un autre processus." Existe-il des solutions de contournement dans ce scénario?
Vous devez vous connecter pour publier un commentaire.
Pour le code source d'origine
FileShare.ReadWrite
(le quatrième argument) est critique. Assurez-vous de ne pas la confondre avecFileAccess.ReadWrite
.Je vais faire le poisson. Le partage de fichiers en mode critique, vous devez permettre l'écriture de partage. Qui ne peut pas être rejetée puisque le processus d'écriture du fichier déjà obtenu l'accès en écriture. Le StreamReader() constructeur utilise FileShare.Lire et ne pas avoir une option pour utiliser une valeur différente. À l'aide de la StreamReader(Stream) constructeur est, au contraire, est en effet la solution de contournement.
Méfiez-vous cependant que ce mode de partage a également des implications pour votre code. Vous ne pouvez pas prédire quand les autres processus de bouffées de chaleur le fichier. La dernière ligne vous lire peut contenir qu'une partie d'une ligne de texte. Quand il bouffées de est fichier tampon à nouveau, plus tard, vous aurez le reste de la ligne. Manifestement, cela peut gâcher votre logique.
Il dépend de la
FileShare
mode avec lequel le fichier a été ouvert par l'application ajoute dans le fichier. Lorsque l'application a été l'ouverture du fichier, il a spécifié unFileShare
mode pour d'autres applications pour accéder au fichier. CetteFileShare
mode pourrait avoir été lire, à écrire, à la fois, de supprimer, de toutes ces, ou aucun.Vous devez spécifier le même
FileShare
mode que l'autre application spécifiée. Si les autres applications autorisées seulement la lecture, l'utilisationFileShare.Read;
si elle a permis à la fois la lecture et de l'écriture, de l'utilisationFileShare.ReadWrite
.StreamReader
utilise uniquementFileShare.Read
mode, donc vous pouvez déjà supposer que ce n'est pas la bonne. Donc, essayez de ReadWrite, comme suit:Pas sûr de savoir comment cela va se comporter avec un fichier déjà ouvert, mais cela permettra d'éviter votre application à partir de la fermeture:
Espère que cela aide!