Когда умирает StreamWriter ? - C#
Формулировка задачи:
Есть класс:
Если я принудительно не вызываю метод Dispose(), то возникает эксепшн в месте закрытия потока. Резонный вопрос - а кто же закрывает его до меня? При этом файл лога fout пустой. Записи там появляются только если методе Flush() принудительно вызвать fout.Flush().
Листинг программы
- 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;
- }
- }
- }
Решение задачи: «Когда умирает StreamWriter ?»
textual
Листинг программы
- sealed class yLogFile
- {
- // ...
- ~yLogFile()
- {
- Dispose(false);
- }
- public void Dispose()
- {
- }
- private void Dispose(bool disposing)
- {
- if (disposing)
- {
- // Dispose() ...
- GC.SuppressFinalize(this);
- }
- else
- {
- // Финализатор ...
- }
- }
- // ...
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д