2016-02-18 2 views
0
List<string> errorLog = new List<string>(); 

foreach (DirectoryInfo dir in directories) 
{ 
    try 
    { 
     dir.Delete(true); 
    } 
    catch (System.IO.IOException msg) 
    { 
     code = 5; 
     errorLog.Add(String.Concat(dir.FullName, " ", msg.Message)); 
     Console.WriteLine("Error Removing the directory: {0}", dir.FullName); 
    } 
} 

У меня есть цикл for each, который пройдет через список каталогов и удалит их, но сохранит родительский каталог. Если возникла ошибка, я хотел бы зарегистрировать ее. Я создал list, а в catch добавьте ошибки. В конце я могу проверить длину списка errorLog, и если он больше нуля, я могу их распечатать. Я видел сообщения, в которых они вызывают using и streamwriter, но что произойдет, если что-то произойдет во время записи журнала ошибок?Ошибки регистрации, а затем их распечатка

Является ли это тем, что я считаю плохой практикой? Если да, что мне делать?

+1

Вход в консоль невелик, я бы по крайней мере зарегистрировался в текстовом файле. Какой тип приложения вы разрабатываете? Если это веб-приложение, я бы использовал пакет регистрации, например log4net или что-то подобное. Если у вас есть база данных, я могу войти в базу данных. Вход в файл или базу данных значительно облегчает просмотр журналов, и в конце дня вы создаете журналы для их просмотра, когда что-то идет не так, тем быстрее вы можете сделать это лучше. –

+1

@JeffFinn - простое приложение командной строки. Я делаю вывод в текстовый файл. Когда для каждого сделано, если errorlog больше 0, я буду писать в текстовый файл. –

ответ

0

Думаю, у вас есть правильная идея. Существует много решений, но в последнее время я попытался перенаправить вывод консоли в файл, и он работал очень хорошо. Что касается вашего решения, это будет выглядеть так:

try 
{ 
    FileStream oStream; 
    StreamWriter sWriter; 
    var oldOut = Console.Out; 
    var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 
    const string outputFileName = "\\errorlog.txt"; 
    var fullPath = string.Concat(desktopPath, outputFileName); 
    Console.SetOut(sWriter); 

    foreach (DirectoryInfo dir in directories) 
    { 
     try 
     { 
      dir.Delete(true); 
     } 
     catch(System.IO.IOException msg) 
     { 
      code = 5; 
      errorLog.Add(String.Concat(dir.FullName," ",msg.Message)); 
      Console.WriteLine("Error Removing the directory: {0}", dir.FullName); 
     } 
    } 
} 
catch(Exception e) 
{ 
    //handle error with streams or file 
} 
finally 
{ 
    //ensures that we close the connections and such 
    Console.SetOut(oldOut); 
    sWriter.Close(); 
    oStream.Close(); 
} 

Окончательно блок гарантирует, что если какой-либо необработанное вещь случается, поток и файл будет по-прежнему закрыт.

+0

Я привык использовать инструкцию 'using', но я понимаю, что вы после, спасибо –

Смежные вопросы