从FileInfo中的文件夹中获取图像文件

时间:2017-12-28 11:16:50

标签: c# asp.net console-application

我正在创建一个控制台应用程序,并且从特定文件夹中我只想获得具有特定扩展名的图像。

下面的代码我正在尝试,但它正在检索特定路径中的所有文件。

string[] extensions = { ".jpg", ".jpeg", ".png", ".gif", ".tif" };
FileInfo[] files = new DirectoryInfo(SourcePath).GetFiles("*.*", SearchOption.AllDirectories);

如何在FileInfo[]上设置扩展程序?

更新了问题

enter image description here

答案

List<String> ImageFiles = Directory.GetFiles(SourcePath, "*.*",
             SearchOption.AllDirectories)
            .Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" }
            .Contains(Path.GetExtension(file)))
            .ToList();
            List<FileInfo> files = new List<FileInfo>();
            foreach (string filess in ImageFiles)
            {
                string replace = filess.Replace(@"\", "/");
                files.Add(new FileInfo(replace.Split('/').Last()));
            }

这里我怎么能摆脱每个循环,因为我只需要文件名而不是整个路径

3 个答案:

答案 0 :(得分:3)

请使用以下代码。

 List<String> ImageFiles = Directory.GetFiles(DirPath, "*.*",
                 SearchOption.AllDirectories)
                .Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" }
                .Contains(Path.GetExtension(file)))
                .ToList();
                List<FileInfo> images = new List<FileInfo>();
                foreach (string fileName in ImageFiles)
                {
                images.Add(new FileInfo(fileName));
                }

答案 1 :(得分:2)

尝试以下代码段。根据您的问题更新了答案

void Main()
{


List<string> ext = new List<string> { ".jpg", ".jpeg", ".png", ".gif", ".tif" }; 
FileInfo[] files = new DirectoryInfo(@"c:\temp").EnumerateFiles("*.*", SearchOption.AllDirectories) 
.Where(path => ext.Contains(Path.GetExtension(path.Name))) 
.Select(x => new FileInfo(x.FullName)).ToArray();
}

// Define other methods and classes here

答案 2 :(得分:2)

我认为最好使用Directory.EnumerateFiles而不是GetFiles。 EnumerateFiles方法不会等到加载所有文件。使用大量文件可以提高效率。

void Main()
{
    string[] ext = new List<string> {".jpg", ".jpeg", ".png", ".gif", ".tif"};
    FileInfo[] files = new DirectoryInfo(SourcePath).EnumerateFiles(@"C:\temp", "*.*", SearchOption.AllDirectories)
     .Where(path => ext.Contains(Path.GetExtension(path.ToLower()));
}

更新:

回答更新的问题。

    var ImageFilenames = Directory.EnumerateFiles(SourcePath, "*.*",
     SearchOption.AllDirectories)
    .Where(file => new string[] { ".jpg", ".jpeg", ".png", ".gif", ".tif" }
    .Contains(Path.GetExtension(file)))
    .Select(p => p.Substring(p.LastIndexOf('\\') + 1));