C# GDI+發生一般性錯誤 A generic error occurred in GDI+
阿新 • • 發佈:2022-04-01
生產上在使用Image.Save方法的時候,時不時的出現以下錯誤,讓人頭大
A generic error occurred in GDI+
因為是時不時出現的,不是100%的出現,所以就問題就比較難搞了,依次做了以下嘗試:
1、檢查資料夾存不存在
2、檢查影象能否正常顯示
3、檢查是否有寫入許可權
均正常
按照C# GDI+發生一般性錯誤(A generic error occurred in GDI+)) - guangfengli - 部落格園 (cnblogs.com)這篇文章的方法,嘗試獲取錯誤程式碼
var code = Marshal.GetLastWin32Error(); throw new Exception(exp.Message + ":" + code.ToString(), exp);
結果錯誤程式碼是 0
Tutorial - Debug system error codes - Win32 apps | Microsoft Docs
按照微軟錯誤程式碼表格:
ERROR_SUCCESS 0 (0x0) The operation completed successfully.
最後,仔細觀察了要儲存的檔名後發現檔名裡有不允許出現的特殊字元
附上除去檔名特殊字元的方法:
protected string ReplaceFileSpecialChar(string name, string replaceWith = " ") {if (IsFileNameValid(name)) return name; var result = ""; List<string> errorStr = new List<string>() { "/", "\\", ":", ",", "*", "?", "\"", "<", ">", "|" }; for (int i = 0; i < name.Length; i++) { var ch = name[i].ToString();if (errorStr.Contains(ch)) result += replaceWith; else result += ch; } return result; } private bool IsFileNameValid(string name) { bool isFilename = true; string[] errorStr = new string[] { "/", "\\", ":", ",", "*", "?", "\"", "<", ">", "|" }; if (string.IsNullOrEmpty(name)) { isFilename = false; } else { for (int i = 0; i < errorStr.Length; i++) { if (name.Contains(errorStr[i])) { isFilename = false; break; } } } return isFilename; }