.NET StreamReader не закрывается - PullRequest
2 голосов
/ 12 февраля 2009

Я использую файл RTF в качестве шаблона для веб-приложения ASP.NET. Мой код VB.NET читает файл с помощью StreamReader, заменяет некоторые строки и создает новый документ Word с данными из базы данных. Мой код закрывает и удаляет StreamReader. Однако при попытке загрузить исправленный файл RTF на веб-сервер появляется сообщение об ошибке «Не удается открыть файл для записи». Очевидно, что файл остается открытым еще долго после запуска страницы ASP.NET.

Как принудительно закрыть StreamReader? Даже редактирования файла web.config для принудительной перезагрузки веб-приложения недостаточно для снятия блокировки этого файла.

Ответы [ 3 ]

4 голосов
/ 12 февраля 2009

рассмотрите возможность использования выражения "использование", также доступного в VB.net

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

}

поток закроется, даже если сгенерировано исключение

Рассмотрите возможность закрытия всех реализаций IDisposable, как это

1 голос
/ 12 февраля 2009

Кажется странным, если он висит даже после закрытия / удаления. Используете ли вы FileStream вместе с StreamReader? Обычно я использую FileStream для управления доступом к файлу и подачи его в StreamReader, а именно:

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();

Еще лучше, если вы ограничиваете использование вашего StreamReader одним методом, добавьте Close / Dispose в Окончание.

0 голосов
/ 16 февраля 2009

Убедитесь, что поток окончательно закрыт.

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...