1. 程式人生 > 其它 >C# GDI+發生一般性錯誤 A generic error occurred in GDI+

C# GDI+發生一般性錯誤 A generic error occurred in GDI+

生產上在使用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; }