Comme Jared dit, Vous ne pouvez pas faire cela, à moins que l'entité qui a ouvert le fichier permettent de partager les lectures. Excel permet de partagé lit, même pour les fichiers qu'il a ouvert pour l'écriture. Par conséquent, vous devez ouvrir le filestream avec le partage de fichiers.ReadWrite paramètre.
Le partage de fichiers param est souvent mal compris. Il indique que d'autres dispositifs d'ouverture de fichier peut le faire. Il s'applique à passé comme de l'avenir d'ouverture. Pensez à FileShare pas comme un rétroactive interdiction avant automatiques (par exemple Excel), mais une contrainte qui ne doit pas être violé avec l'ouverture actuelle ou à l'avenir s'Ouvre.
Dans le cas de l'actuel tentez d'ouvrir un fichier, partage de fichiers.Lire "ouvrir ce fichier pour moi avec succès que si elle préavis, ouvre-ouvert seulement pour Lire." Si vous spécifiez FileShare.Lire sur un fichier ouvert en écriture par Excel, votre ouvrir échouera, car ce serait une violation de la contrainte, parce qu'Excel a ouvert pour l'écriture.
Parce que Excel a ouvert le fichier pour l'écriture, vous devez ouvrir le fichier avec FileShare.ReadWrite si vous voulez que votre ouvert à réussir. Une autre façon de penser le partage de fichiers param: il précise "de l'autre gars d'accès au fichier".
Supposons maintenant qu'un autre scénario, dans lequel vous êtes à l'ouverture d'un fichier qui n'est pas actuellement ouvert par une autre application. FileShare.Lu dit "l'avenir ouvre-pouvez ouvrir le fichier avec un accès en Lecture".
Logiquement, ces sémantique du sens - FileShare.Lire signifie, que vous ne voulez pas lire le fichier si l'autre gars est déjà écrit, et vous ne voulez pas que les autres gars pour écrire le fichier si vous êtes déjà à le lire. FileShare.ReadWrite signifie, que vous êtes prêt à lire le fichier, même si l'autre gars est écrit, et vous n'avez pas de problème à laisser un autre ouvreur écrire le fichier pendant que vous le lisez.
En aucun cas, ne présente de permettre à plusieurs écrivains. Partage de fichiers est similaire à une base de données IsolationLevel. Votre réglage souhaité ici dépend de la "cohérence" des garanties dont vous avez besoin.
Exemple:
using (Stream s = new FileStream(fullFilePath,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
...
}
ou,
using (Stream s = System.IO.File.Open(fullFilePath,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
}
Addendum:
La documentation sur le Système.IO.Partage de fichiers est un peu mince. Si vous voulez obtenir le droit de faits, aller à la documentation de la fonction Win32 CreateFile, ce qui explique le concept de partage de fichiers de mieux.