Can you keep a StreamReader from disposing the underlying stream?

前端 未结 9 2020
小鲜肉
小鲜肉 2020-11-30 09:22

Is there a way to do this:

this.logFile = File.Open(\"what_r_u_doing.log\", FileMode.OpenOrCreate, FileAccess.ReadWrite);

using(var sr = new StreamReader(th         


        
相关标签:
9条回答
  • 2020-11-30 10:16

    I was able to use leaveOpen parameter without specifying all the constructor params (encoding or buffer size) like this:

    using var streaReader = new StreamReader(stream, leaveOpen: true);
    
    0 讨论(0)
  • 2020-11-30 10:17

    .NET 4.5 will finally fix this problem with a new constructors on StreamReader and StreamWriter that take a leaveOpen parameter:

    StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen)
    
    StreamWriter(Stream stream, System.Text.Encoding encoding, int bufferSize, bool leaveOpen)
    
    0 讨论(0)
  • 2020-11-30 10:22

    I always use something like this: (it also uses the leaveOpen argument)

    public static class StreamreaderExtensions
    {
        public static StreamReader WrapInNonClosingStreamReader(this Stream file) => new StreamReader(file, Encoding.UTF8, true, 1024, true);
    }
    

    Usage:

    using (var reader = file.WrapInNonClosingStreamReader())
    {
         ....
    }
    
    0 讨论(0)
提交回复
热议问题