【问题标题】:.Net file pattern picks up unwanted files (C#).Net 文件模式拾取不需要的文件 (C#)
【发布时间】:2012-01-04 22:35:15
【问题描述】:

我有一个如下命令。我发现如果我使用*.csv 的文件模式,它也会拾取带有.csvx 扩展名的项目。也许这是对 8.3 文件名时代的回归——任何人都知道一种可以正确返回它们的方法,最好不要自己滚动?

files = (from file in Directory.EnumerateFiles(sourceFolder, filePattern, SearchOption.TopDirectoryOnly) select file).ToList();

【问题讨论】:

  • 添加filePattern,只是为了完成。
  • 而且将ToList()EnumerateFiles() 结合起来毫无意义
  • @Henk "我发现如果我使用 *.csv 的文件模式,它也会拾取带有 .csvx 的项目"
  • 8.3 的回退听起来很合理,因为对应于 *.csvx 文件的 8.3 名称确实与 *.csv 模式匹配。
  • @codeinc 我宁愿在代码块中看到它与"

标签: c# .net io


【解决方案1】:

只是一种解决方法,但可能已经足够了:

var files = Directory
             .EnumerateFiles(sourceFolder, filePattern, SearchOption.TopDirectoryOnly)
             .Where(f => f.EndsWith(".csv"))
             .ToList();

【讨论】:

  • 谢谢。我想到了这个解决方法,但它使用户在调用函数时指定模式变得更加复杂(即,它更硬编码)。干杯!
【解决方案2】:

你可以试试这样的:

var files = (from file in Directory.EnumerateFiles(directory, "*.csv", SearchOption.TopDirectoryOnly)
                         select file).Where(c => c.EndsWith(".csv")).ToList();

【讨论】:

  • 感谢 xtian - 这正是我所担心的!
【解决方案3】:

您也可以使用“扩展”属性

var files = new DirectoryInfo(path).GetFiles("*.csv").Where((info) => info.Extension = ".csv")

【讨论】:

  • 是的,谢谢。仍然没有正确实现 . 模式的想法,但它的声音是有意的。干杯
【解决方案4】:

这种行为是设计使然:

因为此方法会检查 8.3 文件的文件名 名称格式和长文件名格式,搜索模式类似于 “1.txt”可能会返回意外的文件名。例如,使用一个 “1.txt”的搜索模式返回“longfilename.txt”,因为 等效 8.3 文件名格式为“LONGFI~1.TXT”。

您将不得不使用其中一种解决方法。

来源:http://msdn.microsoft.com/en-us/library/wz42302f.aspx

【讨论】:

  • 谢谢阿诺德,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2023-01-21
  • 2011-12-11
  • 1970-01-01
  • 2011-08-27
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多