Обработка исключений при чтении и записи при добавлении записи в файл - PullRequest
2 голосов
/ 06 июля 2011

Я бы хотел написать запись в журнале в случае неудачной попытки операции чтения (записи) файла, например:

try
{
    //some file operation, for example:
    TextReader tr2 = new StreamReader(nfilepath);
    resultN = tr2.ReadLine();
    tr2.Close();             
}
catch (Exception ex)
{
   string recfilepath = "...
   string rectoadd = "RecDateTime=" + DateTime.Now.ToString()+ ...+ex.Message.ToString();
   File.AppendAllText(recfilepath, rectoadd);
}

Это правильный способ сделать это?Что если в приведенном выше примере попытка записи записи журнала (File.AppendAllText(recfilepath, rectoadd);) также не удалась?

Ответы [ 5 ]

2 голосов
/ 06 июля 2011

Никогда не перехватывать тип исключения - таким образом вы скрываете ошибки программы. Поймать только ожидаемые типы исключений - в этом случае это может быть IOException.

Внутри блока catch вы можете добавить еще один блок try-catch и сообщить об ошибке регистрации другим способом: трассировка, окно сообщения и т. Д.

1 голос
/ 06 июля 2011

File.AppendAllText - 9 возможных исключений (согласно msdn, ссылка здесь )

EventLog ( msdn link ), с другой стороны, позволяет записывать исключения в журнал событий Windows. И EventLog.WriteEntry имеет только 3 возможных исключения ( EventLog.WriteEntry исключения ). переключение на метод EventLog.WriteEntry уменьшит количество возможных исключений. Но ... если вы все еще хотите попытаться записать исключения в какой-то определенный файл, оставьте текущую логику. просто добавьте еще один блок try catch, т.е.

catch (Exception ex)
{
try
{
   string recfilepath = "...
   string rectoadd = "RecDateTime=" + DateTime.Now.ToString()+ ...+ex.Message.ToString();
   File.AppendAllText(recfilepath, rectoadd);
}
catch ()
{
// do Event logging
//also moving the string rectoadd declaration outside the try catch scope
// will give u ability to use it in this catch block to write it to the windows event log
}
}
1 голос
/ 06 июля 2011

Это действительно плохая ситуация для вас :-) Есть две вещи, которые вы можете попробовать:

  1. Put File.AppendAllText (recfilepath, rectoadd); внутри другого блока try-catch и в блоке catch просто запишите в консоль журнала исключение.
  2. Используйте log4net или реализуйте класс журнала самостоятельно и убедитесь, что средство записи журнала никогда не выдает исключение.
1 голос
/ 06 июля 2011

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

1 голос
/ 06 июля 2011

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

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

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