2009-09-07 5 views
29

J'ai utilisé File.ReadAllText pour récupérer du csv, mais chaque fois que j'oublie de fermer le fichier dans Excel, l'application lève une exception car elle ne peut pas avoir accès au fichier.La manière la plus facile de lire le fichier texte qui est verrouillé par une autre application

(semble fou pour moi, je veux dire la READ ReadAllText semble assez clair)

Je sais qu'il ya File.Open avec toutes les cloches et de sifflets, mais est-il une méthode « intermédiaire » qui n » t impliquer déconner avec des tampons et des tableaux char?

Oui, je suis paresseux, donc voter contre moi, me donner la première réponse :)

Répondre

45

Je pense que vous voulez juste les éléments suivants:

using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var textReader = new StreamReader(fileStream)) 
{ 
    var content = textReader.ReadToEnd(); 
} 

Le paramètre FileAccess.Read est ce qui est important, pour indiquer que vous voulez seulement lire le fichier. Bien sûr, même pour ce faire, le fichier doit avoir été ouvert par Excel en en mode lecture-partage (voir l'FileShare enum dans .NET). Je n'ai pas testé, donc je ne peux pas garantir qu'Excel le fasse, bien que je m'attendrais à ce qu'il le fasse.

+0

Merci, quelle est la chose la plus courte que je puisse mettre entre {} pour extraire toute la chaîne du fichier? (J'ai dit que j'étais paresseux) – Benjol

+0

@Benjol: Pas de problème. Mis à jour avec le code pour lire tout le texte. – Noldorin

+0

@Noldorin, merci. C'était le chaînon manquant. J'ai regardé toutes les méthodes disponibles sur FileStream, ne pouvait pas comprendre. – Benjol

0

Si vous souhaitez spécifier des options de partage de fichiers afin d'ouvrir un fichier qui est en cours d'utilisation, vous re coincé avec File.Open().

+1

C'est Excel qui ouvre le fichier, donc l'OP ne peut pas le contrôler. Il ne peut qu'espérer qu'Excel l'ouvre en mode lecture-partage et l'ouvre lui-même en lecture seule. – Noldorin

Questions connexes