2010-07-20 4 views
3

Comment lire et écrire sur un fichier texte sans obtenir l'exception que "Fichier est déjà utilisé par une autre application"?Lecture/écriture de fichier texte à plusieurs reprises/simultanément

J'ai essayé les fonctions File.readalltext() et File.Appendalltext() .. Je commence juste avec filestream.

Qu'est-ce qui fonctionnerait le mieux dans mon scénario? Je vous serais reconnaissant un code snipplets trop ..

Merci

Répondre

6

Ceci est tout à voir avec la sémantique de verrouillage et de partage que vous demandez lors de l'ouverture du fichier.

Au lieu d'utiliser l'approche de raccourci de File.ReadAllText(), essayez de regarder en utilisant un System.IO.FileStream et un System.IO.StreamReader/System.IO.StreamWriter.

Pour ouvrir un fichier:

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var streamReader = new StreamReader(fileStream)) 
{ 
    var someText = streamReader.ReadToEnd(); 
} 

Notez le FileShare.ReadWrite - cela dit le flux pour permettre le partage soit à d'autres lecteurs ou d'autres écrivains.

Pour l'écriture essayer quelque chose comme

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Create, FileAccess.Write, FileShare.Read)) 
using (var streamWriter = new StreamWriter(fileStream)) 
{ 
    streamWriter.WriteLine("some text"); 
} 

Notez le FileShare.Read - cela dit le flux pour permettre le partage aux lecteurs seulement. Avoir une lecture autour du System.IO.FileStream et de ses surcharges de constructeur et vous pouvez adapter exactement comment il se comporte en fonction de votre objectif.

+0

Votre deuxième bloc de code dit 'FileShare.Read', pas' FileShare.Write' –

+0

@Matt Ellen. Corrigé - merci. –

1

Vous devez vous assurer que le fichier n'est pas utilisé par une autre application.

Avec votre propre application, vous ne pouvez pas lire à partir d'un fichier plusieurs fois sans fermer le flux entre les lectures.

Vous devez savoir pourquoi le fichier est en cours d'utilisation - un outil comme FileMon peut aider à trouver.

Questions connexes