C# 如何跳过foreach循环中像素格式无效的文件?

C# 如何跳过foreach循环中像素格式无效的文件?,c#,out-of-memory,gdi+,pixelformat,C#,Out Of Memory,Gdi+,Pixelformat,我有一个简单的程序,它遍历图像列表,检查图像的宽度和高度,然后根据结果将它们移动到指定的文件夹。我正在使用Image.FromFilepath检查图像,一旦它命中特定的图像,我就会得到一个OutOfMemoryException 已经讨论了此错误的潜在原因 我肯定知道错误的原因,一些TIFF图像因为一些荒谬的原因被点击!位深度为40,这不是有效的GDI+像素格式,仅供参考 我可以用try-catch-OutOfMemoryException来解决这个问题,但我更愿意检查图像是否有有效的像素格式,

我有一个简单的程序,它遍历图像列表,检查图像的宽度和高度,然后根据结果将它们移动到指定的文件夹。我正在使用Image.FromFilepath检查图像,一旦它命中特定的图像,我就会得到一个OutOfMemoryException

已经讨论了此错误的潜在原因

我肯定知道错误的原因,一些TIFF图像因为一些荒谬的原因被点击!位深度为40,这不是有效的GDI+像素格式,仅供参考


我可以用try-catch-OutOfMemoryException来解决这个问题,但我更愿意检查图像是否有有效的像素格式,而不是希望因为任何其他原因而没有出现异常。

如果imige是invalidTIFF==数千种不兼容的文件格式,似乎有一个参数会引发异常。接住并继续。
string directory = @"C:\foo\bar\";

foreach (string path in Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".tif", StringComparison.OrdinalIgnoreCase)))
{

    //exception thrown here, at Image.FromFile
    Image i = Image.FromFile(path);

    if (i.Width > i.Height)
    {
        i.Dispose();
        File.Move(path, directory + @"horizontal\" + path.Substring(path.LastIndexOf(@"\") + 1));
    }
    else
    {
        i.Dispose();
        File.Move(path, directory + @"vertical\" + path.Substring(path.LastIndexOf(@"\")));
    }

}