1. C# / Говнокод #9443

    +960

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    private static void WriteErrLog(string FileName, string errors)
    {
        try
        {
            string name = Environment.CurrentDirectory + "\\log\\" + FileName.Replace("80020_", "");
            name = name.Replace(".xml", ".txt");
            if (File.Exists(name))
                name = name.Replace(".txt", "_" + DateTime.Now.ToString("yyyy-MM-dd hh_mm_ss") + ".txt");                
            using (StreamWriter f = new StreamWriter(name, true, Encoding.GetEncoding(1251)))
            {
                f.Write(errors);
            }
        }
        catch { }
    }

    Продолжаем...

    Запостил: invi, 16 Февраля 2012

    Комментарии (16) RSS

    • Ну как минимум using присутствует, что уже неплохо.
      Но о Path.Combine автор не слышал.
      Запись лога в текущую директорию? Возможно автор не в курсе о том, что она может свободно измениться в процессе исполнения программы. Кроме того директория может быть защищена UAC. Нужно пользовать специализированные пользовательские папки или на крайний случай запрашивать права, если так уж нужно писать в другие места.
      Все остальные мансы с именем файла, конкатенкация там, где лучше очевиднее использовать String.Format, глухой catch, да и само написание велосипедов для логирования....
      В общем грустный код.
      Ответить
      • Ну, в данном случае глухой catch, мне кажется, как раз уместен. А что еще делать?
        catch (Exception ex)
        {
        WriteErrLog(FileName, string.Format("Error writing log '{0}': {1}", FileName, ex));
        }
        Ответить
        • Глухой catch прячет ошибки, которые потом хрен найдешь.
          В данном случае, код отладочный, и если возникли проблемы с записью, автор предпочел промолчать.
          Хотя не помешало бы вывести ошибку куда-то в другое место, например на консоль.
          Ответить
          • зато без ашибок работаит!!!!1

            не знаю как в бейсике, но нормальные отладчики исключения журналируют, потом остановиться можно, стек посмотреть... хотя кому это нужно, работает же без ошибок
            Ответить
          • Я использую глухой катч.
            Потому что когда по логике исключения в принципе быть не должно, а оно есть, то лучше как-нибудь сообщить пользователю и попытаться работать дальше.
            Ответить
            • Что значит "не должно, но есть"? Тогда это ошибка в программе: пользователю "Извините: внутренняя ошибка", исключение в лог.
              Ответить
              • ошибка записи в лог ...
                "нанести, смыть, повторить"
                Ответить
                • Ну да, это такой крайний случай. Маловероятный, скорей всего, но интересно, что в таком случае делать. Падать нехорошо, пользователя донимать в гуях тоже... остается игнорировать.
                  Ответить
                  • Список возможных эксепшенов для этого кода не так уж велик, и они все известны. При работе с файлами нужен системный подход. Скажем, если у нас ошибка с безопасностью - запросить. Если место закончилось - тем более стоит спросить пользователя. Или файл ридонли. Это те вещи, о которых пользователю стОит знать. Остальное - так уж и быть - можно проигнорить, но перед этим постараться обработать то, что можно.
                    А давить всё подряд - моветон.
                    Ответить
            • а что ты понимаешь под глухим кетчем?
              а) который что-то ловит и ничего не делает;
              б) который всё ловит;
              в) а) и б) вместе.
              Ответить
              • Который всё ловит и говорит пользователю как можно подробнее о том, что жопа. И ничего не кидает выше.
                Ответить
                • Глухим котчем называется котч, который ловит все исключения и ничего не делает с ними.
                  Т.е. аналог Resume Next от VB.
                  Т.е. что бы внутри трайкотча не случилось - без отладки этого никто никогда не узнает, разве что по косвенным признакам прерывания какой-то логики.
                  Ответить
    • однобайтные кодировки следует приравнять к расизму
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий