WinForms程序在System.Drawing.dll中抛出System.ArgumentException,我不知道为什么

时间:2016-12-14 14:31:09

标签: c# winforms exception

我编写了一个小程序来扫描文件夹中的文件,如果它们是图像文件,程序将检查图像的宽度,高度和DPI是否与用户在表单中输入的内容相匹配。

对于与这三个类别中的任何一个都不匹配的每个图像,程序将文件文件(逗号分隔)写入文件名,并测试图像失败/通过。从本质上讲,它确保文件夹中的所有图像都是用户定义的尺寸和dpi。

以下是'scan'方法的代码:

else
        {
            string[] filesInDirectory = Directory.GetFiles(scanDirTb.Text);

            int i = 0;
            int n = 100;
            string width = widthTb.Text;
            string height = heightTb.Text;
            string dpi = dpiTb.Text;

            foreach (string element in filesInDirectory)
            {
                string ext = Path.GetExtension(filesInDirectory[i]);

                if (i == n)
                {
                    //update the scanned images label every 100 images to show progress
                    scannedImagesLbl.Text = "Images scanned : " + i + "/" + filesInDirectory.Length;
                    n = n + 100;
                    Refresh();
                }

                if (ext.Contains(".jpg") || ext.Contains(".jpeg") || ext.Contains(".gif") || ext.Contains(".bmp") || ext.Contains(".png"))
                {
                    using(Bitmap currentImage = new Bitmap(filesInDirectory[i]))
                    {
                        bool widthMatch  = widthMatches (currentImage, width);
                        bool heightMatch = heightMatches(currentImage, height);
                        bool dpiMatch    = dpiMatches   (currentImage, dpi);

                        if (!widthMatch || !heightMatch || !dpiMatch)
                        {
                            string fileName = Path.GetFileName(filesInDirectory[i]);
                            writeLog(fileName, widthMatch, heightMatch, dpiMatch);
                            i++;
                        }
                        else
                        {
                            i++;
                        }
                    }

                }
                else
                {
                    i++;
                }
            }

            scannedImagesLbl.Text = "Images scanned : " + i + "/" + filesInDirectory.Length;

        }
    }

似乎工作正常 - 没有写入文件的问题,等等。但是,我正在尝试扫描大约21,000个文件,其中大约20,950个是图像,当我到图像~11,000时,程序抛出此异常:

System.Drawing.dll中出现未处理的“System.ArgumentException”类型异常

附加信息:参数无效。

在这一行:

                    using(Bitmap currentImage = new Bitmap(filesInDirectory[i]))

之前我遇到过此问题,但其原因是由于权限问题。这里的权限不应该有任何问题,所有文件都在一个文件夹中,并且没有设置任何特殊权限。

任何人都知道造成这种异常的原因是什么?

编辑:想想这可能很重要 - 该程序每次都会在大约11,000张图像中抛出此异常。我已经测试了4次。

1 个答案:

答案 0 :(得分:0)

问题是一个0kb的图像文件......我觉得很愚蠢