C# 测试文件夹中的每个文件是否为jpeg

C# 测试文件夹中的每个文件是否为jpeg,c#,file-io,jpeg,C#,File Io,Jpeg,我希望代码能够执行以下操作: foreach(File in Directory) { test to see if the file is a jpeg } 但是我不熟悉如何读取文件。我如何做到这一点?为什么不使用只获取您想要的?此代码将返回所有.jpg和.jpeg文件 Directory.GetFiles("Content/img/", ".jp?g"); 为什么不习惯只得到你想要的呢?此代码将返回所有.jpg和.jpeg文件 Directory.GetFiles("Content/

我希望代码能够执行以下操作:

foreach(File in Directory)
{
  test to see if the file is a jpeg
}
但是我不熟悉如何读取文件。我如何做到这一点?

为什么不使用只获取您想要的?此代码将返回所有
.jpg
.jpeg
文件

Directory.GetFiles("Content/img/", ".jp?g");
为什么不习惯只得到你想要的呢?此代码将返回所有
.jpg
.jpeg
文件

Directory.GetFiles("Content/img/", ".jp?g");

如果您的目标是.NET4,那么它可能会更高效,尤其是对于更大的目录。如果没有,您可以用下面的
GetFiles
替换
EnumerateFiles

//add all the extensions you want to filter to this array
string[] ext = { "*.jpg", "*.jpeg", "*.jiff"  };
var fPaths = ext.SelectMany(e => Directory.EnumerateFiles(myDir, e, SearchOption.AllDirectories)).ToList();
一旦有了具有正确扩展名的文件列表,就可以使用中提到的两种不同方法中的一种来检查该文件是否实际上是JPEG(而不仅仅是重命名为
.jpg
)。(来自该职位)

或者一种更精确但更慢的方法

static bool IsJpegImage(string filename)
{
    try
    {
        System.Drawing.Image img = System.Drawing.Image.FromFile(filename);

        // Two image formats can be compared using the Equals method
        // See http://msdn.microsoft.com/en-us/library/system.drawing.imaging.imageformat.aspx
        //
        return img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (OutOfMemoryException)
    {
        // Image.FromFile throws an OutOfMemoryException 
        // if the file does not have a valid image format or
        // GDI+ does not support the pixel format of the file.
        //
        return false;
    }
}

如果JPEG文件的扩展名不正确,则必须循环浏览目录中的所有文件(使用
*.
作为过滤器),并对其执行上述两种方法中的一种。

如果您针对的是.NET 4,则可能更有效,尤其是对于较大的目录。如果没有,您可以用下面的
GetFiles
替换
EnumerateFiles

//add all the extensions you want to filter to this array
string[] ext = { "*.jpg", "*.jpeg", "*.jiff"  };
var fPaths = ext.SelectMany(e => Directory.EnumerateFiles(myDir, e, SearchOption.AllDirectories)).ToList();
一旦有了具有正确扩展名的文件列表,就可以使用中提到的两种不同方法中的一种来检查该文件是否实际上是JPEG(而不仅仅是重命名为
.jpg
)。(来自该职位)

或者一种更精确但更慢的方法

static bool IsJpegImage(string filename)
{
    try
    {
        System.Drawing.Image img = System.Drawing.Image.FromFile(filename);

        // Two image formats can be compared using the Equals method
        // See http://msdn.microsoft.com/en-us/library/system.drawing.imaging.imageformat.aspx
        //
        return img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg);
    }
    catch (OutOfMemoryException)
    {
        // Image.FromFile throws an OutOfMemoryException 
        // if the file does not have a valid image format or
        // GDI+ does not support the pixel format of the file.
        //
        return false;
    }
}

如果您的JPEG文件可能没有正确的扩展名,那么您必须循环浏览目录中的所有文件(使用
*.
作为过滤器),并对其执行上述两种方法之一。

如果您只想知道哪些文件具有JPEG扩展名,我会这样做:

HashSet<string> JpegExtensions = 
    new HashSet<string>(StringComparer.InvariantCultureIgnoreCase)
        { ".jpg", ".jpe", ".jpeg", ".jfi", ".jfif" }; // add others as necessary

foreach(var fname in Directory.EnumerateFiles(pathname))
{
    if (JpegExtensions.Contains(Path.GetExtension(fname))
    {
        Console.WriteLine(fname); // do something with the file
    }
}
HashSet-JpegExtensions=
新的哈希集(StringComparer.InvariantCultureIgnoreCase)
{.jpg“,.jpe“,.jpeg“,.jfi“,.jfif”};//根据需要添加其他内容
foreach(目录中的var fname.EnumerateFiles(路径名))
{
if(JpegExtensions.Contains(Path.GetExtension(fname))
{
Console.WriteLine(fname);//对文件执行一些操作
}
}

如果您只想知道哪些文件具有jpeg扩展名,我会这样做:

HashSet<string> JpegExtensions = 
    new HashSet<string>(StringComparer.InvariantCultureIgnoreCase)
        { ".jpg", ".jpe", ".jpeg", ".jfi", ".jfif" }; // add others as necessary

foreach(var fname in Directory.EnumerateFiles(pathname))
{
    if (JpegExtensions.Contains(Path.GetExtension(fname))
    {
        Console.WriteLine(fname); // do something with the file
    }
}
HashSet-JpegExtensions=
新的哈希集(StringComparer.InvariantCultureIgnoreCase)
{.jpg“,.jpe“,.jpeg“,.jfi“,.jfif”};//根据需要添加其他内容
foreach(目录中的var fname.EnumerateFiles(路径名))
{
if(JpegExtensions.Contains(Path.GetExtension(fname))
{
Console.WriteLine(fname);//对文件执行一些操作
}
}

---这回答了你的问题吗?如果Jonathans的答案不是你想要的,那么directory.getfiles().All(x=>x.fileextension==jpg));语法可能有点偏离,你想知道它是不是一个有效的jpeg文件,或者只是它有一个jpeg扩展名吗?我想也许更好的解释方法是:
foreach(jpg in directory){//Do something}
只要检查jpeg扩展名就可以了。--这能回答你的问题吗?如果Jonathans的答案不是你想要的,那么directory.getfiles().All(x=>x.fileextension==jpg));语法可能有点不正确。您想知道它是一个有效的jpeg文件,还是只是有一个jpeg扩展名?我想更好的解释方法是:
foreach(目录中的jpg){//Do something}
只需检查jpeg扩展名就可以了。实际上,它将返回一个字符串数组,其中包含文件夹中每个文件的完整路径。理论上,以下也是jpeg文件:.jpe、.jfif和.jif,它只会告诉您它们是否有可能的扩展名。它不会验证文件的格式。实际上,它将返回一个包含文件夹中每个文件的完整路径的字符串数组。理论上,以下也是jpeg文件:.jpe、.jfif和.jift这只是告诉您它们是否有可能的扩展名。它不会验证文件的格式。经过多次测试,我需要的答案似乎是您的。感谢您在这方面花费的时间和精力。以下是最后,我得到了:
var fPaths=ext.SelectMany(a=>Directory.EnumerateFiles(filepath,a,SearchOption.AllDirectories)).ToList();for(int I=0;I
经过多次测试,我需要的答案似乎是您的。感谢您在这方面花费的时间和精力。以下是我的结论:
var fPaths=ext.SelectMany(a=>Directory.EnumerateFiles(filepath,a,SearchOption.AllDirectories)).ToList();for(int I=0;I