为什么有些.Net Exceptions以换行结束

时间:2009-12-07 11:49:53

标签: .net exception

我有一个向用户显示错误的ListView。其中一部分还包括异常消息。该错误也会写入日志文件。

现在我注意到一些异常消息以换行符结尾。例如File.Move可以返回消息(英文.Net 3.5 SP1)“当该文件已存在时无法创建文件。\ r \ n”

换行导致listview和logfiles看起来很奇怪。添加.Trim()可以解决问题,但是换行是有原因的。

2 个答案:

答案 0 :(得分:2)

我认为错误来自底层操作系统,而不是来自.Net。即便如此,它最后有一条新线的事实只是它的编写方式不一致。如果你知道它就像那样存在(并且其他错误信息也可以这样做),至少你可以通过从最后修改换行符在你自己的代码中优雅地处理这个案例。

答案 1 :(得分:2)

有两个异常消息文本来源。首先是mscorlib.dll中的字符串资源,第二个是Windows本身使用FormatMessage()API生成的文本。您的示例的错误代码是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}复合格式化参数生成有意义的文件名。显然你的程序失败了,这有点奇怪。回退是由FormatMessage()生成的Windows错误消息,它的格式与您找到的资源字符串的格式不同。

可以说这是一个错误,您可以在connect.microsoft.com上报告。这将得到修复的几率为零。有一些灵魂在那里解析Message属性,特别是因为这是一个IOException。像你一样修剪是一个很好的解决方法。