.NET StreamReader가 닫히지 않습니다
-
22-08-2019 - |
문제
RTF 파일을 ASP.NET 웹 응용 프로그램의 템플릿으로 사용하고 있습니다. 내 vb.net 코드는 Streamreader를 사용하여 파일을 읽고 일부 문자열을 대체하며 데이터베이스의 데이터로 새 Word 문서를 만듭니다. 내 코드는 스트리트 리더가 닫히고 처분합니다. 그러나 수정 된 RTF 파일을 웹 서버에 업로드하려고하면 "쓰기를 위해 파일을 열 수 없다"는 오류가 발생합니다. 따라서 분명히 ASP.NET 페이지가 실행 된 후 파일은 오래 지속됩니다.
StreamReader를 어떻게 닫을 수 있습니까? Web.config 파일을 편집하여 웹 응용 프로그램이 다시 시작되도록하는 것만으로 도이 파일의 잠금을 제거하기에 충분하지 않습니다.
해결책
VB.NET에서 사용할 수있는 "사용"관용 사용을 고려하십시오.
using(StreamReader reader = new StreamReader(...)) {
}
예외가 발생하더라도 스트림이 닫히게됩니다.
이와 같은 모든 idisposable 구현을 종료하는 것을 고려하십시오
다른 팁
가까이/폐기 한 후에도 매달려 있으면 이상하게 보입니다. StreamReader와 함께 Filestream을 사용하고 있습니까? 일반적으로 파일에 대한 액세스를 제어하기 위해 Filestream을 사용하고 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();
더 나은 방법은 스트림 리더의 사용을 하나의 방법으로 제한하는 경우 마침내 닫기/폐기를 고수하십시오.
스트림이 마지막으로 닫혀 있는지 확인하십시오.
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();
}
제휴하지 않습니다 StackOverflow