FileStream.close() n'a pas de fichiers gratuit pour les autres processus
J'ai Code Suivant dans un Document appelé la fonction. Lorsque la Page est chargée, la première fois après le lancement de Visual Studio, tout fonctionne bien.
Mais tout autre appel d'ouverture du Fichier après le qui renvoie IOException: "File is in use by another process"
, même quand il s'agit de l'ouverture du Fichier dans VisualStudio Solution de cette Erreur est retournée(bien sûr pas Exception)
FileStream mailinglist_FileStream = new FileStream(@"\foobarFile.txt", FileMode.Open);
PeekingStreamReader mailinglist_Reader = new PeekingStreamReader(mailinglist_FileStream);
//Do some stuff with the file
mailinglist_FileStream.Close();
mailinglist_Reader.Close();
mailinglist_Reader.Dispose();
mailinglist_FileStream.Dispose();
Pourquoi le fichier est toujours bloqué? et pourquoi ne pleinement de redémarrer Visual Studio réinitialiser le Fichier?
lors de la vérification de fichier-Propriétés, il dit:
Action De Génération: Le Contenu
Copie vers le répertoire de sortie: ne pas Copier
Je ne fais que de la lecture de ce Fichier. puis-je faire quelque chose de semblable à adLockOptimistic
, de sorte que plusieurs processus peuvent accéder au Fichier?
OriginalL'auteur Vogel612 | 2013-02-19
Vous devez vous connecter pour publier un commentaire.
Sur "pourquoi pleinement de redémarrer Visual Studio [...]": parce que vous peut-être à l'aide de IIS Express ou ASP.NET Serveur de Dev dont sont fermés lorsque vous fermez l'IDE, donc des verrous sur les fichiers sont publiés depuis le processus de la tenue de la verrouille n'est plus en cours d'exécution.
Et sur "pourquoi est-ce que le fichier est toujours bloqué?[...]" il pourrait être parce que le flux de fichier n'est pas fermé parce que parfois, le fil peut ne pas se terminer avec succès et les verrous ne sont pas libérés.
Que d'autres réponse dit, vérifier comment
using
bloc peut éviter queIDisposable
objets ne serait pas disposé:Oui, jetez un oeil à
File.Open
méthode etFileShare
énumération:File.Open
: http://msdn.microsoft.com/en-us/library/y973b725.aspxFileShare
enum: http://msdn.microsoft.com/en-us/library/system.io.fileshare.aspxConcernant votre accolades commentaire: "sans les { }" est une préférence personnelle de l'aide de la syntaxe de la langue. Un seul bloc d'instructions ne nécessite pas d'accolades de délimitation. Et le partage de fichiers.ReadWrite va permettre à d'autres processus d'accès au fichier, mais ça ne résout pas le problème du fichier en cours d'ouverture à gauche. Bel exemple, et de bons points.
OriginalL'auteur Matías Fidemraizer
Apprendre à utiliser
à l'aide de
:La
using
construire assure que le dossier sera fermé lorsque vous quittez le bloc, même si une exception est levée.Votre problème est peut-être pas ici, mais ailleurs dans votre code. Vous aurez à passer par tous de votre code et de chercher des endroits où vous avez ouvert les fichiers, mais pas de le mettre à l'intérieur d'un
using
déclaration.OriginalL'auteur शेखर
Essayez d'utiliser
using
blocs, il ne peut pas résoudre votre problème de verrouillage, mais il est préférable de formulaire pour les objets jetables.Aussi, essayez de fermer
mailinglist_Reader
avantmailinglist_FileStream
.Appel de
Stream.Close
à l'aide du bloc est redondante.Ce que font exception-vous, la même chose? Essayez de commenter les deux
Close();
lignes qu'ils sont probablement appelés parusing
.OriginalL'auteur Adam K Dean