c# - 列出文件夹中匹配模式的文件

标签 c# .net directory

我需要列出目录中匹配某种模式的文件。 我尝试使用 Directory.GetFiles,但没有完全 了解它为什么以某种方式表现。

1) 例如这段代码:

            string[] dirs = Directory.GetFiles(@"c:\test\", "*t");

            foreach (string dir in dirs)
            {
                Debugger.Log(0, "", dir);
                Debugger.Log(0, "", "\n");

            }

输出这个:

c:\test\11.11.2007.txtGif
c:\test\12.1.1990.txt
c:\test\2.tGift
c:\test\2.txtGif
c:\test\test.txt
...others hidden

您可以看到一些文件以 f 结尾,但仍被查询返回,为什么

2) 另外,这个:

                string[] dirs = Directory.GetFiles(@"c:\test\", "*.*.*.txt");


                foreach (string dir in dirs)
                {
                    Debugger.Log(0, "", dir);
                    Debugger.Log(0, "", "\n");

                }

返回这个:

c:\test\1.1.1990.txt
c:\test\1.31.1990.txt
c:\test\12.1.1990.txt
c:\test\12.31.1990.txt

但是根据文档 ( http://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx ) 我认为它也必须返回 这个文件在目录中:

11.11.2007.txtGif

因为扩展名(在查询字符串中)是 3 个字母长, 但它没有。为什么? (当查询扩展为 3 个字母时,doc 说它也会返回以指定扩展开头的扩展,例如,请参阅备注)。


难道只有我一个人觉得这些结果很奇怪吗?

当您想要列出文件夹中与特定模式匹配的文件时,您是否会推荐使用其他方法?

在我的例子中,用户可能会任意输入一些模式,我不想依赖 我不确定结果的方法(就像 GetFiles 发生的那样)。

最佳答案

这就是 Windows API 的工作方式 - 如果您在命令提示符下使用 dir 命令,您将看到相同的结果。这不使用正则表达式!这很晦涩...

如果你想做自己的过滤,你可以这样做:

var filesEndingInT = Directory.EnumerateFiles(@"c:\test\").Where(f => f.EndsWith("t"));

如果想使用正则表达式匹配,可以这样:

Regex regex = new Regex(".*t$");
var matches = Directory.EnumerateFiles(@"c:\test\").Where(f => regex.IsMatch(f));

我怀疑您想让用户输入简化形式的模式并将其转换为正则表达式,例如

"*.t" -> ".*t$"

查找所有以 t 结尾的文件名的正则表达式是“.*t$”:

.*t$

Regular expression visualization

Debuggex Demo

关于c# - 列出文件夹中匹配模式的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739767/

相关文章:

c# - GridView 取一行

c# - 针对部署到多个环境的 Web 应用程序的 VS Application Insights

c# - 将列表作为 XElement 传递以用作 XML 数据类型参数

.net - 为具有集成硬件的专用计算机开发

c++ - 如何使用 C 或 C++ 获取目录中的文件列表?

c# - WPF:在不破坏 IsEnabled 的情况下实现 ICommandSource

c# - 为什么我可以在 C# 中执行此操作?(带有 () 的公共(public)类)

c# - 值是枚举和 -1 吗?

python - 如何使用python复制文件以及目录结构/路径?

git - 在 Git 存储库中,如何正确重命名目录?