Когда умирает StreamWriter ? - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс:
public class yLogFile : IDisposable
    {
        private StreamWriter fout;
        private string buffer;
        private bool Disposed = false;
        public yLogFile(string fname)
        {
            fout = new StreamWriter(fname, true, Encoding.UTF8);
            buffer = "------------- Log Begin -------------";
            Flush();
        }
 
        ~yLogFile()
        {
            Dispose();
        }
 
        public void WriteToLog(string msg)
        {
            //действия по записи в лог-файл
        }
        
        private void Flush()
        {
            fout.WriteLine(buffer);
            buffer = "";
        }
 
        public void Dispose()
        {
            if (!Disposed)
            {
                buffer = "------------- Log   End -------------";
                Flush();
// эксепшн тут
                fout.Close();
                Disposed = true;
            }
        }
    }
Если я принудительно не вызываю метод Dispose(), то возникает эксепшн в месте закрытия потока. Резонный вопрос - а кто же закрывает его до меня? При этом файл лога fout пустой. Записи там появляются только если методе Flush() принудительно вызвать fout.Flush().

Решение задачи: «Когда умирает StreamWriter ?»

textual
Листинг программы
sealed class yLogFile
{
    // ...
 
    ~yLogFile()
    {
        Dispose(false);
    }
 
    public void Dispose()
    {
    }
 
    private void Dispose(bool disposing)
    {
        if (disposing)
        {
            // Dispose() ...
            GC.SuppressFinalize(this);
        }
        else
        {
            // Финализатор ...
        }
    }
 
    // ...
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы