我有一个目录,其中有两个* .xml文件以" L"开头。我尝试了各种LINQ语法,但都没有返回任何文件。它应该很简单,但我无法解决这个问题。
IEnumerable<string> files = Directory.EnumerateFiles(path)
.Where(p => p.Substring(0,1) == "L");
IEnumerable<string> files = Directory.GetFiles(path, "*.xml")
.Where(p => (p.Substring(0,1) == "L"))
IEnumerable<string> files = Directory.EnumerateFiles(path)
.Where(p => p.StartsWith("L"))
答案 0 :(得分:7)
EnumerateFiles
或GetFiles
返回完整路径,而不仅仅是文件名。
您可以使用IO.Path
课程和GetFileName
或GetFileNameWithoutExtension
:
IEnumerable<string> files = Directory.EnumerateFiles(path)
.Where(p => Path.GetFileNameWithoutExtension(p).StartsWith("L"));
如果您想忽略此案例,请同时接受l
,请使用StartsWith
的重载:
IEnumerable<string> files = Directory.EnumerateFiles(path)
.Where(p => Path.GetFileName(p).StartsWith("L", StringComparison.InvariantCultureIgnoreCase));
如评论所述,在这种情况下,最简单的方法是使用EnumerateFiles
的searchPattern
:
IEnumerable<string> files = Directory.EnumerateFiles(path, "L*.xml");
答案 1 :(得分:5)
让我们看看这两个:
IEnumerable<string> files =
Directory.GetFiles(path, "*.xml")
.Where(p => (p.Substring(0,1) == "L"));
IEnumerable<string> files =
Directory.EnumerateFiles(path)
.Where(p => p.StartsWith("L"));
你必须明白路径是“c:\ blah \ blah \ blah \ L001.xml”。
您需要先获取文件名。这可以通过使用Path.GetFilename(...)
:
IEnumerable<string> files =
Directory.GetFiles(path, "*.xml")
.Where(p => (Path.GetFilename(p).Substring(0,1) == "L"));
IEnumerable<string> files =
Directory.EnumerateFiles(path)
.Where(p => Path.GetFilename(p).StartsWith("L"));
编辑评论中的克莱门斯建议可能是最简单的方法。
答案 2 :(得分:3)
这应该是最快的方式,而不是获取所有文件并在之后过滤
IEnumerable<string> files = Directory.EnumerateFiles(path, "L*.xml")