Question

J'utilise un fichier RTF en tant que modèle pour une application Web ASP.NET. Mon code VB.NET lit le fichier en utilisant un StreamReader, remplace certaines chaînes, et crée un nouveau document Word avec les données de la base de données. Mon code ferme et dispose du StreamReader. Cependant, lorsque je tente de télécharger un fichier RTF révisé au serveur web, je reçois une erreur, « Impossible d'ouvrir le fichier pour l'écriture ». Alors, évidemment, le dossier reste ouvert longtemps après que la page ASP.NET a été exécuté.

Comment puis-je forcer StreamReader à fermer? édition Même le fichier web.config pour forcer l'application Web pour redémarrer ne suffit pas de tuer le verrou sur ce fichier.

Était-ce utile?

La solution

envisager d'utiliser l'expression "à l'aide", également disponible dans VB.net

using(StreamReader reader = new StreamReader(...)) {

}

le flux va se fermer, même si exception est levée

Pensez à fermer toutes les implémentations IDisposable comme ceci

Autres conseils

Il semble étrange si elle est accroché, même après une fermeture / disposer. Utilisez-vous un FileStream avec le StreamReader? En général, j'utilise un FileStream pour contrôler l'accès au fichier et nourrir que la StreamReader, à la:

FileStream fsIn = new FileStream("path",FileMode.Open, FileAccess.Read, FileShare.None);
StreamReader srIn = new StreamReader(fsIn, System.Text.Encoding.Default);

//...do stuff....

srIn.close();
srIn.Dispose();
fsIn.close();
fsIn.Dispose();

Mieux encore, si vous limitez l'utilisation de votre StreamReader à une méthode, coller le Fermer / Détruire Enfin.

Assurez-vous que le flux est fermé enfin.

FileStream fsIn = null;
StreamReader srIn = null; 

try
{
  fsIn = new FileStream("path",FileMode.Open, FileAccess.Read, FileShare.None);
  srIn = new StreamReader(fsIn, System.Text.Encoding.Default);

  //...do stuff....

}
catch (Exception ex)
{
}
finally
{
  srIn.close();
  srIn.Dispose();
  fsIn.close();
  fsIn.Dispose();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top