Существует два источника текста сообщения об исключении. Первый - это строковые ресурсы в 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. Обрезка, как вы, - хороший обходной путь.