【发布时间】:2014-11-02 14:07:00
【问题描述】:
我需要列出目录中匹配某种模式的文件。
我试过玩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 发生的那样)。
【问题讨论】:
-
扩展名是txtGif,而不仅仅是txt。
-
第一个例子我觉得很奇怪,但后来我也觉得难以置信。 (我并不怀疑你,它为什么会返回
f是没有意义的)(也许*.*t可能会有所帮助) -
已经试过了吗? Directory.GetFiles(@"c:\test\", "\w*.txt");