System.ObjectDisposedException: «Невозможно записать в закрытый TextWriter.»Ошибка в SetOut - PullRequest
0 голосов
/ 24 октября 2018

Я пишу программу, которая может просматривать все файлы внутри папки, а затем записывать вывод консоли в новый текстовый файл, но когда я запускаю программу после записи 1 строки, выдается сообщение об ошибке

System.ObjectDisposedException: «Невозможно выполнить запись в закрытый TextWriter.»

Вот код:

string[] files = Directory.GetFiles(@"C:\CSA FIles(test)\", "*.*", 
                                    SearchOption.AllDirectories);

        foreach (string file in files)
        {

            if (File.GetLastWriteTime(file)
                < DateTime.Now.AddMonths(-3))
            {

               Console.WriteLine(file);


                using (StreamWriter writer = new StreamWriter(@"C:\for checking\sample.txt"))
                 {
                     Console.SetOut(writer);
                     Act();
                 }
                 void Act()
                 {
                     Console.WriteLine(file);
                 }`

1 Ответ

0 голосов
/ 24 октября 2018

Как говорит Рон в своем комментарии, объект StreamWriter утилизируется, пока еще используется Console.Лучше всего восстановить исходный поток перед удалением StreamWriter.

using (StreamWriter writer = new StreamWriter(@"C:\for checking\sample.txt"))
{
    var originalStream = Console.Out;
    Console.SetOut(writer);
    Act();
    Console.SetOut(originalStream);
} //writer object is disposed here

Microsoft предоставит пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...