简体   繁体   English

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

[英]Get Image file from folder in FileInfo

I am making a console application and from a particular folder I want to get only the images with specific extension.我正在制作一个控制台应用程序,并且从特定文件夹中我只想获取具有特定扩展名的图像。

Below code I am trying but it's retrieving all the files from the particular path.下面的代码我正在尝试,但它正在从特定路径检索所有文件。

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

How can I set extension on FileInfo[] ?如何在FileInfo[]上设置扩展名?

Updated Issue更新问题

在此处输入图片说明

Answer回答

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

here how Can I get rid from for each loop as I am only needing file name and not the whole path在这里我如何摆脱每个循环,因为我只需要文件名而不是整个路径

Please use the below code.请使用以下代码。

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

Try following code snippet .尝试以下代码片段。 Updated the answer as per your question根据您的问题更新了答案

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

I think it will be better to use Directory.EnumerateFiles instead of GetFiles.我认为使用 Directory.EnumerateFiles 而不是 GetFiles 会更好。 EnumerateFiles method is not waiting until all files are loaded. EnumerateFiles 方法不会等到所有文件都加载完毕。 Which can be more efficient with large number of files.对于大量文件,这可以更有效。

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

UPDATE:更新:

Answer to updated question.回答更新的问题。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM