2009-12-07 27 views
3

我有一個ListView,它向用戶顯示錯誤。其中的一部分還包括例外消息。該錯誤也寫入日誌文件。爲什麼一些.Net異常以換行符結尾

現在我已經注意到一些異常消息以換行符結束。例如File.Move可以返回郵件(英文.Net 3.5 SP1)「當該文件已存在時無法創建文件。\ r \ n」

新行導致listview和日誌文件看起來很奇怪。添加一個.Trim()修復了這個問題,但是換行符有一個原因。

+0

我認爲其原因確實是那個寫它的人打破了慣例。 – 2009-12-07 12:01:44

回答

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。像你一樣修剪是一個很好的解決方法。

2

我認爲錯誤來自底層操作系統,而不是來自.Net。即便如此,最後還有一條新線的事實只是它的寫法不一致。如果你知道它存在那樣(並且其他錯誤消息也可以這樣做),那麼至少你可以通過從最後修剪換行符來優雅地在自己的代碼中處理這個案例。

+0

我用反射器環顧四周,消息確實來自OS,而不是.Net框架,通過GetMessage API。 – adrianm 2009-12-08 06:52:57

相關問題