Почему некоторые исключения .Net заканчиваются символом новой строки - PullRequest
3 голосов
/ 07 декабря 2009

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

Теперь я заметил, что некоторые сообщения об исключениях заканчиваются символом новой строки. например File.Move может вернуть сообщение (англ. .Net 3.5 SP1) "Невозможно создать файл, если этот файл уже существует. \ R \ n" .

Новая строка заставляет просмотр списка и лог-файлы выглядеть странно. Добавление .Trim () решает проблему, но есть ли причина для перехода на новую строку.

Ответы [ 2 ]

2 голосов
/ 07 декабря 2009

Существует два источника текста сообщения об исключении. Первый - это строковые ресурсы в mscorlib.dll, второй - текст, сгенерированный самой Windows с помощью API FormatMessage (). Код ошибки для вашего примера: 183, ERROR_ALREADY_EXISTS. Mscorlib.dll содержит выделенный строковый ресурс для этой ошибки:

IO.IO_AlreadyExists_Name=Cannot create "{0}" because a file or directory with the same name already exists.

В этом сообщении нет перевода строки. Код, который генерирует сообщение об исключении (System.IO.WinIOError), сначала проверяет, существует ли значимое имя файла для генерации для аргумента составного форматирования {0}. Очевидно, что это не работает в вашей программе, это немного странно. Резервным вариантом является сообщение об ошибке Windows, созданное FormatMessage (), и оно не совсем отформатировано так же, как строки ресурса, как вы его нашли.

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

2 голосов
/ 07 декабря 2009

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

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