我编写了一个小程序来扫描文件夹中的文件,如果它们是图像文件,程序将检查图像的宽度,高度和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次。答案 0 :(得分:0)
问题是一个0kb的图像文件......我觉得很愚蠢