C# 另一个";GDI+;中发生一般性错误&引用-问题:

C# 另一个";GDI+;中发生一般性错误&引用-问题:,c#,database,gdi+,system.drawing,C#,Database,Gdi+,System.drawing,好的,我用谷歌搜索了这个问题,在Stackoverflow中也搜索了一下,但我找不到解决方案,太多的地方都是简单的解决方案。我从数据库加载图像,并将它们作为JPG localy保存在一个目录中。大多数图像都可以正常工作和保存,但有些图像会出现“GDI+中出现一般错误”错误 这是我的代码: using (var encoderPara = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qual))

好的,我用谷歌搜索了这个问题,在Stackoverflow中也搜索了一下,但我找不到解决方案,太多的地方都是简单的解决方案。我从数据库加载图像,并将它们作为JPG localy保存在一个目录中。大多数图像都可以正常工作和保存,但有些图像会出现“GDI+中出现一般错误”错误

这是我的代码:

        using (var encoderPara = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qual))
        using (var paras = new EncoderParameters(1))
        using (var conn = new SqlConnection(conn_str))
        using (var cmd = new SqlCommand(cmd_str,conn))
        {
            paras.Param[0] = encoderPara;
            conn.Open();
            using (var reader = cmd.ExecuteReader())
                while (reader.Read())
                    if (!reader.IsDBNull(reader.GetOrdinal("Image")))
                    {
                        var img = $"{reader["Order"]}_{reader["SubOrder"]}.jpg";
                        var P = Path.Combine(BasePath, img);

                        if (!File.Exists(P))
                            try
                            {
                                using (var MS = new MemoryStream((byte[])reader["Image"]))
                                using (var Img = Image.FromStream(MS))
                                using (var ImgJPG = new Bitmap(Img.Width, Img.Height))
                                using (var g = Graphics.FromImage(ImgJPG))
                                {
                                    g.Clear(Color.White);
                                    g.DrawImage(Img, new Point(0, 0));
                                    ImgJPG.Save(P, JPG_Encoder, paras);
                                    WriteinLog($"Image created: {P}");
                                }
                            }
                            catch (Exception ex)
                            {
                                WriteinLog(string.Format("{1}{0}{0}{2}{0}{0}{3}{0}{0}{4}{0}{0}{5}{0}{0}{6}", Environment.NewLine, $"Error {img}", ex.GetType().FullName, ex.Message, ex.Source, ex.StackTrace, ex.TargetSite));
                            }
                    }
        }
我认为错误在最内部的使用块中,因为它似乎没有问题。因此,我删除了usings并尝试将图像保存为原样,但仍然出现GDI+错误

然后看起来是这样的:

                                var MS = new MemoryStream((byte[])reader["Meta"]);
                                var Img = Image.FromStream(MS);
                                {
                                    Img.Save(P);
                                    WriteinLog($"Image created: {P}");
                                }

我的主要问题是,它适用于大多数图像,只有一些图像是例外,但如果它出现编解码器错误,则会更快地触发错误。这不可能是MS或Image被处理了,因为它们一起在using块中,我试图删除using。不可能是文件存在并且正在使用,因为我检查了它。

好的,我写了最后一句话“不可能是文件存在并且正在使用,因为我检查了它。”并且意识到不是所有的子订单号都是数据库中的数字,所以用递增的整数替换文件名,它就工作了

因此,“GDI+中发生了一般错误”——路径错误时的错误。很高兴知道并留意

我已经写下了所有这些,所以我把它和答案一起贴出来,作为对我的橡胶鸭子的感谢,并希望它能帮助其他人