【问题标题】:Get Image file from folder in FileInfo从 FileInfo 中的文件夹获取图像文件
【发布时间】:2017-12-28 11:16:50
【问题描述】:

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

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

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

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

更新问题

回答

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

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

【问题讨论】:

  • 现在您的extensions 和对GetFiles 的调用之间绝对没有任何联系。您必须过滤文件列表或迭代扩展名。
  • @ManfredRadlwimmer 无法获取 FileInfo[] 文件中的数据吗?
  • 怎么说不可能?

标签: c# asp.net console-application


【解决方案1】:

请使用以下代码。

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

【讨论】:

  • FileInfo[]文件中不能获取数据吗?
  • 可以在没有foreach循环的情况下完成吗?我只能获取文件名而不是获取完整路径吗?
  • "Regex.Match(fileName, @"[^\]*$").Value" 使用正则表达式你会得到没有路径的文件名。
【解决方案2】:

试试下面的代码 sn-p 。根据您的问题更新了答案

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

【讨论】:

  • A ToLower 还包括像 test.JPG 这样的文件。 GetExtensions 方法还包括 .,因此它也必须存在于 ext 中。
  • FileInfo[]文件中不能获取数据吗?
  • 是的,有可能 FileInfo[] smFiles = di.GetFiles("*.jpg"); foreach (smFiles 中的 FileInfo fi) { }
  • GetFiles 返回 FileInfo。你有什么要求
  • @santoshsingh 对于文件信息中的所有图像文件(如 jpg、bmp、png)来说是什么
【解决方案3】:

我认为使用 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));

【讨论】:

  • 这是什么?什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
相关资源
最近更新 更多