2011-05-17 4 views
12

Je me demande s'il est possible d'obtenir un FileStream en lecture seule dans un fichier verrouillé? Je reçois maintenant une exception lorsque j'essaie de lire le fichier verrouillé.FileStream avec fichier verrouillé

using (FileStream stream = new FileStream("path", FileMode.Open)) 

Merci!

+0

La ligne que vous affichez ne tente pas de lire un fichier verrouillé, c'est là que vous tentez d'ouvrir un fichier. Créez-vous ce fichier ailleurs? Si une condition de verrouillage existe, vous faites probablement quelque chose pour créer cette condition. Veuillez montrer plus de code autour de la seule ligne que vous avez listée. –

Répondre

27

Vous devriez essayer un autre constructeur. Ils sont documentés sur MSDN.

Celui-ci ressemble à un pari:

FileStream Constructor (String, FileMode, FileAccess, FileShare) 

MSDN Link

FileAccess

Une constante qui détermine la façon dont le fichier est accessible par l'objet FileStream. Cela obtient les propriétés CanRead et CanWrite de l'objet FileStream. CanSeek est vrai si path spécifie un fichier disque.

FileShare

Une constante qui détermine la façon dont le fichier sera partagé par les processus.

+0

Awsome Réponse! Merci! –

6
using (FileStream stream = new FileStream("path", FileMode.Open)) 

qui utilisera la valeur par défaut pour l'argument FileShare, FileShare.Read. Qui nie tout processus d'écriture dans le fichier. Cela ne peut pas fonctionner si un autre processus écrit dans le fichier, vous ne pouvez pas nier un droit déjà acquis.

Vous devez spécifier FileShare.ReadWrite. Cela pourrait ne pas fonctionner si l'autre processus utilisé FileShare.None, pas de solution de rechange pour cela. Méfiez-vous que l'accès en lecture à un fichier en cours d'écriture est problématique, vous n'avez pas d'indication de fin de fichier fiable. Le dernier enregistrement ou la dernière ligne du fichier n'a peut-être été que partiellement écrit.

-1

Vous pouvez simplement déverrouiller le fichier et lire le fichier après. Utilisez simplement Handle.exe de Sysinternals ou Unlocker avec les options de ligne de commande. Ils peuvent tous deux déverrouiller le fichier, et vous pouvez les exécuter à partir de votre programme facilement, sans quitter votre programme. (Mais ne les utilisez pas pour Windows SAM fichier, il ne fonctionne pas avec SAM;)) Bonne chance!

0

J'ai utilisé ce qui suit qui fonctionne, mais doit être utilisé avec prudence car le fichier peut être modifié pendant que vous l'ouvrez par un autre processus.

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite); 
Questions connexes