Вопрос

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

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

Это было полезно?

Решение

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

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

}

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

Рассмотрите возможность закрытия всех подобных реализаций IDisposable.

Другие советы

Кажется странным, если он держится даже после закрытия/удаления.Используете ли вы 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 в метод Final.

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

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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top