Frage

Ich verwende eine RTF-Datei als Vorlage für eine ASP.NET Web-Anwendung. Mein VB.NET-Code liest die Datei einen Stream verwenden, ersetzt einige Strings, und erstellt ein neues Word-Dokument mit Daten aus der Datenbank. Mein Code wird geschlossen und verfügt über die Stream. Allerdings, wenn ich Server eine überarbeitete RTF-Datei auf das Web laden versuchen, ich erhalte eine Fehlermeldung: „Die Datei kann nicht zum Schreiben öffnen“. So offensichtlich bleibt die Datei geöffnet, lange nachdem die ASP.NET-Seite ausgeführt wird.

Wie kann ich zwingen, die Stream zu schließen? Auch die Bearbeitung der Datei web.config neu zu starten, die Webanwendung zu zwingen, ist nicht genug, um die Sperre zu dieser Datei zu töten.

War es hilfreich?

Lösung

betrachten die "Verwendung" Idiom verwenden, auch in VB.net verfügbar

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

}

der Strom geschlossen wird, auch wenn Ausnahme ausgelöst wird,

Beachten Sie alle IDisposable Implementierungen wie diese zu schließen

Andere Tipps

Es scheint seltsam, wenn es hängt auch nach einer Schließ- / entsorgen. Verwenden Sie einen Filestream zusammen mit dem Stream? Im Allgemeinen verwende ich ein Filestream Zugriff auf die Datei zu steuern und füttern, dass auf die Stream, a 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();

Noch besser wäre es, wenn Sie die Verwendung Ihres Stream ein Verfahren sind zu beschränken, die Close-Stick / Entsorgen in einem schließlich.

Stellen Sie sicher, dass der Strom in endgültig geschlossen wird.

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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top