현재 .NET Compact Framework 3.5의 TextWriter 클래스를 사용하여 로그 항목을 파일에 기록하고 있습니다. Thats는 매우 보편적이고 단순한 작업이며 아무런 문제가 없습니다. 그러나 TextWriter를 사용하고 모든 데이터가 기록 될 때 Dispose를 호출하면 파일이 계속 열립니다.내 우선 적용되는 Dispose가 호출되지 않는 이유는 무엇입니까?
내 접근 방식은 FileStream을 초기화 한 다음 FileStream의 생성 된 인스턴스를 사용하여 StreamWriter를 초기화하는 것이 었습니다. 그런 다음 정적 메서드 Synchronized를 사용하여 동기화 된 TextWriter를 만들었습니다.
데이터가 쓰여지고 플러시 된 후 다른 프로세스에서 내 파일에 액세스 할 수없는 이유를 조사하려면 StreamWriter에서 Dispose 메서드가 재정의 된 클래스가 파생되었는지 확인하기 만하면됩니다. 코드를 실행하면 재정의 된 Dispose 메서드가 호출되지 않고 나 혼란 스럽습니다.
var fileStream = new FileStream("\\NAND_FLASH\\test.file", FileMode.OpenOrCreate);
var streamWriter = new ExtendedWriter(fileStream, Encoding.UTF8);
TextWriter textWriter = TextWriter.Synchronized(streamWriter);
textWriter.Dispose();
그리고 파생 클래스 :
호출 코드는
가internal class ExtendedWriter : StreamWriter
{
public ExtendedWriter(Stream stream) : base(stream)
{
}
public ExtendedWriter(Stream stream, Encoding encoding) : base(stream, encoding)
{
}
public ExtendedWriter(Stream stream, Encoding encoding, int bufferSize) : base(stream, encoding, bufferSize)
{
}
public ExtendedWriter(string path) : base(path)
{
}
public ExtendedWriter(string path, bool append) : base(path, append)
{
}
public ExtendedWriter(string path, bool append, Encoding encoding) : base(path, append, encoding)
{
}
public ExtendedWriter(string path, bool append, Encoding encoding, int bufferSize) : base(path, append, encoding, bufferSize)
{
}
protected override void Dispose(bool disposing)
{
Trace.WriteLine("Extended writer dispose!");
base.Dispose(disposing);
}
}
누군가가 나에게이 동작을 설명 할 수 있습니까?
편집 : 업데이트 질문 텍스트, 난 내가 모든이가 IDisposable
인터페이스를 구현 할 때마다하도록되어 어떻게하지 생각하지 않는 .NET Compact Framework에서 3.5
제공하신 코드로 저에게 도움이됩니다. 추적 실패의 문제가 아니라고 확신합니까? –
사실, 전체 프레임 워크 3.5에서 코드가 예상대로 실행됩니다. 나는 어제 그것을 테스트하는 것을 놓쳤다. 닷넷 컴팩트 프레임 워크 3.5 (내가 언급 잊어 버린) 기반의 초기 테스트. 거기에있는 dispose 메서드는 호출되지 않습니다. – xodder
흠. 그게 매우 이상한 소리 -하지만 난 쉽게 불행히도 자신을 위해 그것을 테스트 할 수 없습니다 : ( –