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

问题描述 投票:-2回答:3

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

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

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()));
            }

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

c# asp.net console-application
3个回答
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

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));
                }

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));
© www.soinside.com 2019 - 2024. All rights reserved.