Question

J'essaie d'utiliser un StreamReader pour lire un fichier, mais il est toujours utilisé par un autre processus et je reçois donc cette erreur:

  

Le processus ne peut pas accéder au fichier   '\ arfjwknasgmed17 \ C $ \ FLAG   CONDITION \ CP-ARFJN-FLAG.XLS 'car   il est utilisé par un autre processus.

Existe-t-il un moyen de lire ceci sans le copier? Ou est-ce ma seule option?

Était-ce utile?

La solution

Vous pouvez lire le fichier uniquement si le programme qui a ouvert le fichier a spécifié pour la première fois les droits de partage de lecture sur ce fichier.

Si le fichier ne dispose pas de droits de partage en lecture, vous ne pourrez pas le copier en premier lieu.

Il est possible que vous ne puissiez pas accéder à un fichier si vous spécifiez un droit de partage en conflit avec le droit de partage d'un programme sur lequel le fichier est déjà ouvert. Par exemple, vous ne pouvez pas accorder un accès en écriture si le programme qui l’a déjà ouvert n’accorde pas un accès en écriture.

Si le programme qui a ouvert le fichier en premier lieu prend en charge VSS (Volume Shadow Copy), vous pouvez également utiliser VSS pour accéder au fichier.

Certains pilotes logiciels commerciaux vous permettent d'accéder à ces fichiers, même lorsqu'ils sont en cours d'utilisation. Vous pouviez obtenir Open File Manager de St-Bernards et vous pouvez également utiliser File Access Manager (FAM). par VisionWorks Solutions Inc. Ces pilotes sont généralement fournis par les constructeurs de logiciels de sauvegarde pour être inclus dans leurs produits.

VSS fonctionne en indiquant au programme qui a déjà ouvert le fichier qu’un autre programme aimerait le lire. VSS crée ensuite une copie du fichier et vous permet de lire cette copie. VSS ne fonctionne pas pour les applications héritées.

FAM fonctionne de manière transparente pour les programmes hérités et non hérités en spécifiant une "liste autorisée" d'applications pouvant accéder aux fichiers exclusivement ouverts et verrouillés. Seuls les programmes de cette liste sont autorisés à accéder à ces fichiers. Lors de l'ouverture d'un fichier, celui-ci passe en mode cache afin que vous obteniez une copie du fichier tel qu'il était au début de la "sauvegarde / ouverture" du fichier. À ce stade, le programme qui a initialement ouvert le fichier voit le fichier tel qu'il est réellement, et le deuxième programme de la liste des autorisations, voit le fichier tel qu'il était lors de l'ouverture / la sauvegarde du fichier. Cela garantit la cohérence du fichier.

Autres conseils

essayez le code ci-dessous.

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
fileStream = new StreamReader(fileStr);

Je l'ai essayé sous Windows XP. Si le fichier est déjà ouvert en mode écriture par un autre processus & amp; Si les droits de partage ne sont pas spécifiés, vous pourrez toujours ouvrir le fichier en mode lecture.

Avertissement: Cela fonctionne, mais ensuite, je ne suis pas sûr de l’utiliser dans le code de production. Je ne suis pas encore en mesure de trouver de documentation officielle indiquant que cela devrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top