StreamWriter가 닫힌 후 BaseStream을 열어 두는 방법은 무엇입니까?
StreamWriter
클래스는 닫힐 때 기본 BaseStream
을 해제합니다. 나중에 사용할 수 있도록 BaseStream
을 열어 두려는 경우 이는 문제가 될 수 있습니다.
.NET Framework 4.5 이상용 솔루션
.NET Framework 4.5 이상을 사용하는 경우 작성기를 닫을 때 StreamWriter
가 열려 있어야 하는지 여부를 지정할 수 있는 BaseStream
의 오버로드된 버전을 사용할 수 있습니다.
<code class="language-csharp">public StreamWriter(Stream stream, Encoding encoding, bool leaveOpen);</code>
leaveOpen
매개변수를 true
로 설정하면 BaseStream
을 닫지 않고도 StreamWriter
을 닫을 수 있습니다.
이전 버전의 .NET Framework용 솔루션
4.5 이전 버전의 .NET Framework를 사용하는 경우 다음 두 가지 옵션이 있습니다.
StreamWriter
. 대신 새로 고치고 BaseStream
을 열어 두세요. BaseStream
을 래핑하고 Close()
및 Dispose()
에 대한 호출을 무시하는 클래스를 만듭니다. 이렇게 하면 StreamWriter
에 영향을 주지 않고 BaseStream
을 닫을 수 있습니다. 예(.NET Framework 4.5 이전)
<code class="language-csharp">public class StreamWrapper : Stream { private Stream _baseStream; public StreamWrapper(Stream baseStream) { _baseStream = baseStream; } public override void Close() { // 忽略对 Close 的调用 } public override void Dispose() { // 忽略对 Dispose 的调用 } // 将其他流方法代理到基础流 ... }</code>
이 스트림 래퍼를 사용하면 래핑된 스트림을 사용하는 StreamWriter
을 만들 수 있습니다.
<code class="language-csharp">var baseStream = new MemoryStream(); var wrappedStream = new StreamWrapper(baseStream); using (var writer = new StreamWriter(wrappedStream, Encoding.UTF8)) { writer.Write("..."); writer.Flush(); } // 基础流保持打开状态 baseStream.Seek(0, SeekOrigin.Begin);</code>
위 내용은 StreamWriter를 닫은 후 BaseStream을 열어 두는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!